여러 폴더 이름에서 파일 찾기

여러 폴더 이름에서 파일 찾기

이 명령을 사용하는 하위 디렉터리의 아무 곳에 나 있을 수 있는 , dir1dir2모든 파일을 나열하려고 합니다 . 나는 성공하지 않고 다음을 시도했습니다.dir3dir4cwdfind

find . -type f -regextype posix-egrep -regex 'dir1/.+|dir2/.+|dir3/.+|dir4/.+'

나도 posix-extended그것을 시도했습니다. 이 파일을 어떻게 나열할 수 있나요?

답변1

foo, barbaz3개의 폴더에 있는 모든 파일을 검색하려면 *.py다음 명령을 사용하십시오.

find foo bar baz -name "*.py"

dir1 dir2 dir3따라서 사용한 파일을 표시하려면find dir1 dir2 dir3 -type f

이 시도find . \( -name "dir1" -o -name "dir2" \) -exec ls '{}' \;

답변2

-path 지시어를 사용하는 것이 더 좋습니다:

find .  \( -type f -and -path '*/dir1/*' -or -path '*/dir2/*' -or -path '*/dir3/*' -or -path '*/dir4/*' \)

즉, 경로에 "dir1", "dir2", "dir3" 또는 "dir4"가 있는 현재 디렉터리의 모든 파일을 찾습니다.

답변3

그냥 모두에게 알리려고요. .*/각각을 앞에 추가하면 전체 경로와 일치하는 것으로 보이 dir므로 문제가 해결되었습니다 .regex

답변4

와일드카드(홈 디렉터리)와 일반 apache2 로그 디렉터리로 정의된 여러 위치에서 특정 파일(access_log)을 찾고, 이름 필터링을 적용하여 SSL 로그와 gzip으로 압축된 이전 로그를 제외하는 빠른(!) 예입니다. 이것은 질문에 직접적으로 대답하지는 않지만 이러한 지침을 찾는 사람(나 같은)에게는 유용할 수 있습니다.

find / \( -path "*var/log/apache2*" -o -path "*home/*/logs*" \) -type f  -name "*access_log" ! -name "*ssl*"

\(공백, 특히 및 근처의 공백 에 주의하세요 \).

그런데 나는 그것을 apachetop과 함께 사용하여 내 서버에서 가장 활동적인 웹사이트를 찾습니다.

apachetop -d1 -s9 -p $(find / \( -path "*var/log/apache2*" -o -path "*home/*/logs*" \) -type f  -name "*access_log" ! -name "*ssl*" -print | sed 's/^/-f '/)

관련 정보