특정 형식의 파일만 있는 디렉토리를 어떻게 구분합니까?
diff 명령에 대한 질문이 있는데, 재귀 디렉토리 diff를 특정 파일 형식에만 원하는 경우 어떻게 해야 합니까?
제외 옵션을 사용하려고 했지만 한 패턴만 사용할 수 있습니다.
$ diff /destination/dir/1 /destination/dir/2 -r -x *.xml
폴더 이미지 유형에 파일이 있더라도 xml 파일 형식만 제외할 수 있습니다(png
,gif
,jpg
),txt
,php
,기타
특정 파일 형식만 구분하는 방법을 참조하십시오.
다음을 지정할 수 있습니다.-x
한 번 이상요
diff -x '*.foo' -x '*.bar' -x '*.baz' /destination/dir/1 /destination/dir/2
의 디렉토리 비교 섹션에서 확인할 수 있습니다.info diff
(내 시스템에서 다음을 수행해야 합니다.info -f /usr/share/info/diff.info.gz
):
디렉토리를 비교하는 동안 일부 파일을 무시하려면 '-x PATTANGE' 또는 '--pattern='을 사용하십시오.PATTANGE' 옵션입니다.이 옵션은 기본 이름이 셸 패턴과 일치하는 파일 또는 하위 디렉터리를 무시합니다.셸에서와 달리 파일 이름 베이스 시작의 마침표는 패턴 시작의 와일드카드와 일치합니다.셸에서 PATTANGE을 확장하지 않도록 따옴표로 묶어야 합니다.예를 들어 -x '*' 옵션이 있습니다.[ao]'는 이름이 '.a' 또는 '.o'로 끝나는 파일을 무시합니다.
이 옵션은 두 번 이상 지정하면 누적됩니다.예를 들어 -x 'RCS' -x '*,v' 옵션을 사용하면 기본 이름이 'RCS'이거나 ',v'로 끝나는 파일 또는 하위 디렉토리가 무시됩니다.
man 페이지에서 따왔습니다.
-x PAT --exclude=PAT
Exclude files that match PAT.
-X FILE --exclude-from=FILE
Exclude files that match any pattern in FILE.
그러니까...-x
보고하는 대로 하나의 패턴만 허용하지만 제외할 모든 패턴을 파일에 넣는 경우(대개 한 줄에 하나씩) 다음과 같이 두 번째 플래그를 사용할 수 있습니다.
$ diff /destination/dir/1 /destination/dir/2 -r -X exclude.pats
여기서 exclude.pats는 다음과 같습니다.
*.jpg
*.JPG
*.xml
*.XML
*.png
*.gif
-exec과 함께 찾기를 사용하여 diff를 호출할 수도 있습니다.
cd /destination/dir/1
find . -name *.xml -exec diff {} /destination/dir/2/{} \;
보완적 --include ...이(가)
한 가지 해결 방법을 사용할 수 있습니다. 모든 파일이 포함된 제외 파일입니다.그래서 우리는 창조합니다.file1
확장자가 없는 모든 파일을 찾을 수 있습니다.sed
파일 이름을 잡으면 다음과 같습니다.
diff --exclude-from=file1 PATH1/ PATH2/
예를 들어 다음과 같습니다.
find PATH1/ -type f | grep --text -vP "php$|html$" | sed 's/.*\///' | sort -u > file1
diff PATH1/ PATH2/ -rq -X file1
다음 명령을 사용하여 모든 차이를 찾았습니다.*.tmpl
파일링합니다.DIR1
그리고.DIR2
제 경우에는 잘못된 긍정 결과가 나오지 않았지만, DIRS의 내용에 따라 달라질 수 있습니다.
diff --brief DIR1 DIR2 | grep tmpl
소스를 달리하고 단순하게 유지하려면 다음과 같이 하십시오.
diff -rqx "*.a" -x "*.o" -x "*.d" ./PATH1 ./PATH2 | grep "\.cpp " | grep "^Files"
경로 중 하나에 있는 파일을 가져오려면 마지막 GREP를 제거하십시오.
만약 당신이 편하다면, 당신은 다음을 사용할 수 있습니다.Makefile
"패치 만들기"를 실행합니다. '이렇게 하다'라고 합니다.
#Makefile for patches
#Exlude following file endings
SUFFIX += o
SUFFIX += so
SUFFIX += exe
SUFFIX += pdf
SUFFIX += swp
#Exlude following folders
FOLDER += bin
FOLDER += lib
FOLDER += Image
FOLDER += models
OPTIONS = Naur
patch:
rm test.patch
diff -$(OPTIONS) \
$(foreach element, $(SUFFIX) , -x '*.$(element)') \
$(foreach element, $(FOLDER) , -x '$(element)*') \
org/ new/ > test.patch
unpatch:
rm test.unpatch
diff -$(OPTIONS) \
$(foreach element, $(SUFFIX) , -x '*.$(element)') \
$(foreach element, $(FOLDER) , -x '$(element)*') \
new/ org/ > test.unpatch
보완 --include가 없기 때문에 다음과 같은 복잡한 휴리스틱 패턴을 사용해야 합니다.
*.[A-Zb-ik-uw-z]*
java 파일을 찾을 수 있습니다!
하지만 실제는 피하지 않습니다.diff
다른 파일들 중에서 패치 파일이나 비슷한 파일을 만드는 것이 목적이라면 이 파일을 사용할 수 있습니다.filterdiff
에서요patchutils
패키지(예: only only your를를를를를를를 only only only only).py
이겁니다.
diff -ruNp /path/1 /path/2 | filterdiff -i "*.py" | tee /path/to/file.patch
언급URL : https://stackoverflow.com/questions/3775377/how-do-you-diff-a-directory-for-only-files-of-a-specific-type 입니다.
'programing' 카테고리의 다른 글
모든 Excel 시트 끝에 명명된 시트를 추가하는 방법은 무엇입니까? (0) | 2023.04.25 |
---|---|
Angular 자습서에서 파이프 및 탭 방법이란 무엇입니까? (0) | 2023.04.25 |
파일에서 특정 줄에 대한 커밋 로그를 검색하시겠습니까? (0) | 2023.04.25 |
다양한 MessageBoxImage 또는 MessageBoxIcon의 이미지를 가져오려면 어떻게 해야 합니까? (0) | 2023.04.25 |
Kotlin: 목록 캐스팅을 사용하는 방법:선택되지 않은 캐스트: kotlin.collections입니다.kotlin.colutions에 등록합니다.목록입니다. (0) | 2023.04.25 |