Program Tip

찾기 명령을 사용하지만 두 디렉토리의 파일 제외

programtip 2020. 10. 4. 13:12
반응형

찾기 명령을 사용하지만 두 디렉토리의 파일 제외


로 끝나는 파일을 찾고 싶지만 폴더의 _peaks.bed파일은 제외합니다 .tmpscripts

내 명령은 다음과 같습니다.

 find . -type f \( -name "*_peaks.bed" ! -name "*tmp*" ! -name "*scripts*" \)

하지만 작동하지 않았습니다. tmpscript폴더 의 파일 은 계속 표시됩니다.

누구든지 이것에 대한 아이디어가 있습니까?


다음을 사용하여 지정할 수있는 방법은 다음과 find같습니다.

find . -type f -name "*_peaks.bed" ! -path "./tmp/*" ! -path "./scripts/*"

설명:

  • find . -현재 작업 디렉토리에서 찾기 시작 (기본적으로 재귀 적으로)
  • -type f- find결과에 파일 만 표시 하도록 지정
  • -name "*_peaks.bed" -이름으로 끝나는 파일을 찾습니다. _peaks.bed
  • ! -path "./tmp/*" -경로가 다음으로 시작하는 모든 결과 제외 ./tmp/
  • ! -path "./scripts/*" -경로가 다음으로 시작하는 모든 결과를 제외합니다. ./scripts/

솔루션 테스트 :

$ mkdir a b c d e
$ touch a/1 b/2 c/3 d/4 e/5 e/a e/b
$ find . -type f ! -path "./a/*" ! -path "./b/*"

./d/4
./c/3
./e/a
./e/b
./e/5

당신은 꽤 가까웠고 -name옵션 -path은 전체 경로를 고려하는 기본 이름 만 고려합니다 =)


할 수있는 한 가지 방법이 있습니다 ...

find . -type f -name "*_peaks.bed" | egrep -v "^(./tmp/|./scripts/)"

다음과 같은 시도

find . \( -type f -name \*_peaks.bed -print \) -or \( -type d -and \( -name tmp -or -name scripts \) -and -prune \)

그리고 내가 그것을 조금 잘못 이해하더라도 너무 놀라지 마십시오. 목표가 exec (인쇄 대신) 인 경우에는 대신 대체하십시오.


나를 위해이 솔루션은 find 명령 exec에서 작동하지 않았으므로 이유를 모르겠습니다. 그래서 내 솔루션은

find . -type f -path "./a/*" -prune -o -path "./b/*" -prune -o -exec gzip -f -v {} \;

설명 : sampson-chen과 동일하며

-prune-진행 경로 무시 ​​...

-o-일치하지 않으면 결과를 인쇄합니다 (디렉토리를 정리하고 나머지 결과를 인쇄).

18:12 $ mkdir a b c d e
18:13 $ touch a/1 b/2 c/3 d/4 e/5 e/a e/b
18:13 $ find . -type f -path "./a/*" -prune -o -path "./b/*" -prune -o -exec gzip -f -v {} \;

gzip: . is a directory -- ignored
gzip: ./a is a directory -- ignored
gzip: ./b is a directory -- ignored
gzip: ./c is a directory -- ignored
./c/3:    0.0% -- replaced with ./c/3.gz
gzip: ./d is a directory -- ignored
./d/4:    0.0% -- replaced with ./d/4.gz
gzip: ./e is a directory -- ignored
./e/5:    0.0% -- replaced with ./e/5.gz
./e/a:    0.0% -- replaced with ./e/a.gz
./e/b:    0.0% -- replaced with ./e/b.gz

아래에서 시도해 볼 수 있습니다.

find ./ ! \( -path ./tmp -prune \) ! \( -path ./scripts -prune \) -type f -name '*_peaks.bed'

참고 URL : https://stackoverflow.com/questions/14132210/use-find-command-but-exclude-files-in-two-directories

반응형