Linux 초보자를 완료하고 파일 이름을 찾고 해당 경로를 나열한 다음 특정 하위 문자열이 포함된 경로로만 결과 집합을 추가로 필터링하는 명령에 대한 도움이 필요합니다.
예를 들어, 다음과 같은 파일 이름이 있습니다 someFile.txt
. 이 파일 이름은 여러 디렉터리에 존재할 수 있습니다.
예를 /some/directory/path/good/someFile.txt
들어/some/directory/path/bad/someFile.txt
find를 사용하면 파일에 대한 모든 경로가 포함된 목록을 반환할 수 있지만 경로 이름에 "good"만 포함된 경로도 반환하고 싶습니다. 이 예에서는 변수 경로 이름이 많기 때문에 화이트리스트를 작성하는 것이 더 바람직하지만 "양호"라는 용어가 포함된 경로 이름도 허용된다는 것을 알고 있습니다.
이것이 내가 가진 것입니다.
$ find . -type f \( -name someFile1.txt -o -name someFile2.txt\)
나는 또한 다음을 시도했지만 아무 소용이 없었습니다.
$ find . -type f \(-name someFile1.txt -o -name someFile2.txt\) -print0 | xargs -0 grep -rl 'good'
$ find . -type f \(-name someFile.txt .... | xargs -0 grep 'good'
$ find . -type f \(-name someFile.txt .... | xargs -0 egrep 'good|real_good'
답변1
사용 -path
테스트 find
:
find . -path '*/good/*' -type f \( -name someFile1.txt -o -name someFile2.txt \)
테스트는 비슷하게 작동하지만 현재 고려 중인 파일의 전체 경로 이름에 대해 -path
패턴을 테스트합니다.-name
find
위에서 테스트한 방법을 사용하면 이름이 있거나 이름이 지정된 디렉터리 아래 어딘가에 있는 파일만 someFile1.txt
반환 someFile1.txt
됩니다.good
find
파일이 good
그 아래의 하위 디렉토리가 아닌 디렉토리에 상주해야 하는 경우 다음을 사용하십시오.
find . -type f \( -path '*/good/someFile1.txt' -o -path '*/good/someFile2.txt' \)
또는 그런 것.
someFile1.txt
분명히, and 라는 실제 파일을 찾고 있다면 두 개의 별도 테스트 대신 someFile2.txt
해당 패턴을 사용하게 될 것입니다 .someFile[12].txt
의견을 보면 당신이 사용하고 싶을 것이 분명합니다.
find . -type f \
\( -ipath '*realgood*' -o -ipath '*real_good*' \) \
\( -name someFile1.txt -o -name someFile2.txt \)