찾기에서 디렉토리 제외


11

find?를 사용하여 하나의 디렉토리를 제외하고 패턴과 일치하는 모든 파일과 디렉토리를 어떻게 찾을 수 있습니까?

다음과 같은 파일 구조가 있다고 가정하십시오.

.
  foo-exclude-me /
    foo.txt
  foo-exclude-me-not /
    foo.txt
  바/
    foo.txt
    foobar /
      bar.txt
      foofoo.txt

사용하여 다음과 같은 출력을 얻는 방법은 무엇입니까 find?

./bar/foo.txt
./bar/foobar
./bar/foobar/foofoo.txt
./foo-exclude-me-not
./foo-exclude-me-not/foo.txt

다음 명령을 모두 사용해 보았습니다.

찾기 . -name 'foo-exclude-me'-prune -o -name 'foo *'
찾기 . -이름 'foo *'\! -경로 './foo-exclude-me/*'

그러나 둘 다 이것을 반환합니다.

./bar/foo.txt
./bar/foobar
./bar/foobar/foofoo.txt
./foo-exclude-me # << this should be excluded
./foo-exclude-me-not
./foo-exclude-me-not/foo.txt

foo-exclude-me디렉토리를 올바르게 제외하려면 어떻게 해야합니까?


foo-exclude-me대신에 사용해보십시오 ./foo-exclude-me. 또한 -print명령 끝에 추가 하십시오.
n0pe

@MaxMackie perfect :)
Tyilo

고쳤어? 어느 것이 당신에게 도움이 되었습니까? 의견 대신 답변에 넣을 수 있습니다.
n0pe

모두 사용 @MaxMackie -print하고 foo-exclude-me대신 ./foo-exclude-me.
Tyilo

최고, 질이 나를 이길 것 같습니다 :)
n0pe

답변:


11
find . -name 'foo-exclude-me' -prune -o -name 'foo*' -print

no -print를 사용하면 내재 된 기본 동작이 제거 된 모든 일치 항목에도 적용됩니다. 명시 -print적은 지정된 조건 하에서 만 적용되며 -name 'foo*'의 else 분기에만 -name 'foo-exclude-me'있습니다.

일반적으로, -print술어 결합보다 복잡한 작업을 수행 할 때마다 명시 적으로 사용하십시오 .

일치하지 않기 ! -path './foo-exclude-me/*'때문에 두 번째 시도가 작동 ./foo-exclude-me하지 않았습니다 ./foo-exclude-me/*(후행 없음 /). 추가하면 효과 ! -path ./foo-exclude-me가 있습니다.


-2
-bash-4.1 $ 찾기 -exec ls -l {} + -name 'a.out'-prune -o -name '*'-exec rm -f {} + -exec ls -l {} +

-rw-r--r--. 1 oradba dba 499 Jan 18 19:30 ./a.out
-rw-r--r--. 1 oradba dba 499 Jan 18 20:59 ./b.out
-rw-r--r--. 1 oradba dba 499 Jan 18 20:59 ./c.out
-rw-r--r--. 1 oradba dba 499 Jan 18 20:59 ./d.out

. :
총 16
-rw-r--r--. 1 oradba dba 499 1 월 18 일 19:30 a.out
-rw-r--r--. 1 oradba dba 499 1 월 18 일 20:59 b. 아웃
-rw-r--r--. 1 oradba dba 499 1 월 18 일 20:59 c.out
-rw-r--r--. 1 oradba dba 499 1 월 18 일 20:59 d.out
rm :`. '을 (를) 제거 할 수 없습니다 : 디렉토리입니다
ls : ./b.out에 액세스 할 수 없음 : 해당 파일 또는 디렉토리가 없습니다.
ls : ./d.out에 액세스 할 수 없음 : 해당 파일 또는 디렉토리가 없습니다.
ls : ./c.out에 액세스 할 수 없음 : 해당 파일 또는 디렉토리가 없습니다.
. :
총 4
-rw-r--r--. 1 oradba dba 499 1 월 18 일 19:30 a.out


a.out을 건너 프 i 옵션을 사용하고 잘 작동 - art.s
user211226을

-prune관련성이 있는지 설명하지 않습니다 . -prunefind비활성화되어 있기 때문에 가장 복잡한 옵션 중 하나입니다 -print(기본적으로 활성화되어 있음)
grochmal

-다듬기; 파일이 디렉토리 인 경우, 그 디렉토리로 내려 가지 마십시오. 따라서 보호 기능으로 디렉토리 자체에서 작동하지 않습니다. -art.s
user211226
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.