리스팅 디렉토리가 작동해야합니다. 예를 들어, 여기 스크립트에서 사용한 것이 있습니다 (gnu diff라고 가정).
diff -r \
--exclude="*~" \
--exclude=".svn" \
--exclude=".git" \
--exclude="*.zip*" \
--exclude="*.gz" \
--exclude="*.tar" \
...etc
... .svn
과 .git
dirs의 내용을 무시 하고 *.zip
/ *.gz
/ etc 라는 개별 파일도 무시합니다 .
편집 : 양식의 경로를 필터링 dir_a/file1
하지만 diff
기본 이름이 동일한 파일 (예 : dir_b/file1
또는 dir_a/b/file1
) 을 필터링하려면 diff
(예 :을 사용하여 find
) 생성 할 파일 목록 과 이러한 경로에서 파생 된 파일을 생성 해야합니다. 예를 들어, 주어진
$ find ONE TWO -type f -print
ONE/a/1.txt
ONE/a/2.txt
ONE/a/b/2.txt
TWO/a/1.txt
TWO/a/2.txt
TWO/a/b/2.txt
비교할 파일 목록을 생성합니다 (예 : 제외 */a/2.txt
하지만 이름이 다른 다른 파일 비교) 2.txt
. 다음을 제외한 모든 파일을 "찾기"만하면됩니다 ONE/a/2.txt
(regexp도 여기에서 사용할 수 있습니다 .*/a/2.txt
)
$ find ONE -type f \( ! -regex 'ONE/a/2.txt' \) \
-exec bash -c 'diff -q "${1}" "${2/ONE/TWO}"' - {} {} \;
실제로 ONE/a/2.txt
(및 TWO/a/2.txt
) 는 무시 하지만 여전히 이름이 지정된 다른 파일을 비교합니다 2.txt
.
diff -q ONE/a/1.txt TWO/a/1.txt
diff -q ONE/a/b/2.txt TWO/a/b/2.txt
편집 : 또는 더 재미있게 find
(독자의 연습으로 남은 추가 재미) 제외 할 파일이나 디렉토리를 선택한 다음 diff
다른 모든 것을 선택하십시오 .
$ find ONE \( -regex 'ONE/a/2.txt' -o -name b -prune \) \
-o -type f -exec bash -c 'echo diff -q "${1}" "${2/ONE/TWO}"' - {} {} \
위의 예는 특정 파일 "{top} /a/2.txt", 이름이 "b"인 디렉토리 및 다른 모든 파일은 제외합니다. ( " -name b
" 대신 단순 " "을 사용할 수 있습니다. -regex '.*/b'
참고 ", "는 없습니다.)
diff
의--exclude
옵션이 너무 ......