다음 디렉터리(및 파일) 구조를 고려하세요.
mkdir testone
mkdir testtwo
mkdir testone/.svn
mkdir testtwo/.git
touch testone/fileA
touch testone/fileB
touch testone/fileC
touch testone/.svn/fileA1
touch testone/.svn/fileB1
touch testone/.svn/fileC1
touch testtwo/fileD
touch testtwo/fileE
touch testtwo/fileF
touch testtwo/.git/fileD1
touch testtwo/.git/fileE1
touch testtwo/.git/fileF1
이 두 디렉터리에 있는 모든 파일을 인쇄/찾고 싶지만 하위 디렉터리 .git
및/또는 .svn
.
find test*
...그러면 모든 파일이 덤프됩니다.
내가 이렇게 하면(예를 들어,와일드카드가 포함된 찾기 검색에서 숨겨진 파일 및 디렉터리를 제외/무시하는 방법은 무엇입니까?):
$ find test* -path '.svn' -o -prune
testone
testtwo
$ find test* -path '*/.svn/*' -o -prune
testone
testtwo
...그런 다음 덤프의 최상위 디렉토리만 가져오고 파일 이름은 가져오지 않습니다.
find
파이핑 없이 이와 같은 검색/목록을 자체적으로 수행 할 수 있습니까 grep
(예: find
모든 파일에 대해 a를 수행한 다음: find test* | grep -v '\.svn' | grep -v '\.git'
; 필요하지 않은 최상위 디렉터리 이름도 출력됩니다)?
답변1
명령은 find
주어진 경로가 일치하지 않는 경우 수행할 작업을 말하지 않습니다. 점으로 시작하는 모든 것을 제외하고 나머지를 인쇄하려면 다음을 시도하십시오.
find test* -path '*/.*' -prune -o -print
따라서 해당 경로와 일치하는 모든 항목을 제거하고 일치하지 않는 항목을 인쇄합니다.
출력 예:
testone
testone/fileC
testone/fileB
testone/fileA
testtwo
testtwo/fileE
testtwo/fileF
testtwo/fileD
점으로 시작하는 콘텐츠만 제외하고 다른 내용은 제외하려면 다음을 수행하세요 .svn
..git
find test* \( -path '*/.svn' -o -path '*/.git' \) -prune -o -print
이 예에서는 동일한 출력이 생성됩니다.
최상위 디렉토리를 제외하려면 -mindepth 1
다음과 같은 것을 추가할 수 있습니다.
find test* -mindepth 1 -path '*/.*' -prune -o -print
이것은 만든다
testone/fileC
testone/fileB
testone/fileA
testtwo/fileE
testtwo/fileF
testtwo/fileD
답변2
Eric의 답변을 보완하기 위해 연산자를 find
사용하여 조건자를 뒤집을 수 있습니다 . 경로를 포함하여 파일에 대해 일치를 수행하는 테스트 !
도 있습니다 . -wholename
따라서 다음과 같이 작성할 수 있습니다.
find test* \( ! -wholename "*/.git/*" -a ! -wholename "*/.svn/*" \)