검색에서 디렉토리 제외

검색에서 디렉토리 제외

find패턴과 일치하는 모든 파일 및 디렉터리(디렉토리 하나 제외) 찾기를 사용하는 방법은 무엇입니까 ?

다음과 같은 파일 구조가 있다고 가정해 보겠습니다.

.
  foo-제외-i/
    foo.txt
  foo-exclude-i-not/
    foo.txt
  술집/
    foo.txt
    푸바/
      바.txt
      foofoo.txt

다음 명령을 사용하여 다음 출력을 얻으려면 어떻게 해야 합니까 find?

./bar/foo.txt
./bar/foobar
./bar/foobar/foofo.txt
./foo - 나를 제외 - 아니요
./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?

답변1

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

no 를 사용하면 -print암시적 기본 작업이 모든 일치 항목, 심지어는 정리된 일치 항목에도 적용됩니다. 명시적은 else 분기에만 -print있는 지정된 조건에서만 적용됩니다 .-name 'foo*'-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 1월 18일 19:30 ./a.out
-rw-r--r--. 1 oradba dba 499 1월 18일 20:59 ./b.out
-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

.:
총 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.out
-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

관련 정보