내 디렉토리에 10개의 파일이 있습니다..
test1.txt
test2.txt
test3.txt
.
.
test10.txt
제외 파일 이름인exclusion.txt도 있으며 그 파일 이름은 다음과 같습니다.
test1.txt
test2.txt
test3.txt
text4.txt
제외 파일에서 파일 이름을 제외하고 결과를 제공하는 find 명령이 필요합니다.
test5.txt
test6.txt
test7.txt
text8.txt
test9.txt
text10.txt
답변1
for file in *.txt;do grep ${file} exclude.txt >/dev/null;r=${?}; if [ $r -ne 0 ]; then echo ${file};fi;done| grep -v exclude.txt
Except.txt가 동일한 디렉터리에 없으면 grep
파이프 다음의 마지막 명령을 생략할 수 있습니다.|
답변2
예쁘지는 않지만 작업이 완료됩니다 :)
find . -regextype posix-extended \! -regex "\./($(cat exclude.txt | tr '\n' '|')).*$"
참고: 이는 Except.txt의 마지막 줄에 NEWLINE이 없는 경우에만 작동합니다.
답변3
find
명령을 실행 한 다음 grep
텍스트 파일에 나열된 파일과 반대되는 작업을 수행할 수 있습니다.
find | grep -v -f exclude.list
그러나 이는 해당 이름을 가진 디렉터리, 즉 dir/test1.txt/actual_file
결과의 마지막 부분으로 제한되지 않는 파일 도 제외합니다 find
.
이 문제를 해결하려면 $
제외 목록 항목 끝에 추가하여 행 끝에서만 일치하는지 확인하세요.
test1.txt$
등.
비행 중에는 이렇게 보입니다.
find | grep -v -f <( sed 's/$/$/' exclude.list )
-type f
결과에 파일만 포함되도록 하는 옵션을 추가할 수도 있습니다 .