특정 유형의 파일에 대해서만 디렉토리를 어떻게 비교합니까?
재귀 디렉토리 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
) 의 Comparing Directories 섹션에서 :
디렉토리를 비교하는 동안 일부 파일을 무시하려면 '-x PATTERN'또는 '--exclude = PATTERN'옵션을 사용하십시오. 이 옵션은 기본 이름이 쉘 패턴 PATTERN과 일치하는 모든 파일 또는 서브 디렉토리를 무시합니다. 셸에서와 달리 파일 이름의 시작 부분에있는 마침표는 패턴 시작 부분에있는 와일드 카드와 일치합니다. 쉘이 확장하지 않도록 PATTERN을 따옴표로 묶어야합니다. 예를 들어, -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와 함께 find를 사용하여 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
나는 모두의 DIFF 찾으려면 다음 명령을 사용하여 *.tmpl
간에 파일 DIR1
과 DIR2
. 제 경우에는 오탐이 발생하지 않았지만 DIRS의 내용에 따라 그럴 수도 있습니다.
diff --brief DIR1 DIR2 | grep tmpl
편리하다고 생각되면 다음을 사용할 수 있습니다 Makefile
. 그냥 실행 : "make patch"
#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]*
(대부분) 자바 파일을 찾으려면!
소스를 바꾸고 단순하게 유지하려면 :
diff -rqx "*.a" -x "*.o" -x "*.d" ./PATH1 ./PATH2 | grep "\.cpp " | grep "^Files"
경로 중 하나에 만 존재하는 파일을 얻으려면 마지막 grep을 제거하십시오.
'your programing' 카테고리의 다른 글
사용하지 않는 줄을 주석 처리 한 후 Switch-case가 컴파일되지 않습니다. (0) | 2020.10.05 |
---|---|
스레드를 사용하여 IIS에서 장기 실행 작업을 수행 할 수 있습니까? (0) | 2020.10.05 |
파이썬 직렬화-왜 피클인가? (0) | 2020.10.05 |
Inno Setup : 이전에 설치된 버전을 자동으로 제거하는 방법은 무엇입니까? (0) | 2020.10.05 |
수십억 개의 행을위한 최고의 데이터 저장소 (0) | 2020.10.05 |