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