이 명령을 사용하는 하위 디렉터리의 아무 곳에 나 있을 수 있는 , dir1
의 dir2
모든 파일을 나열하려고 합니다 . 나는 성공하지 않고 다음을 시도했습니다.dir3
dir4
cwd
find
find . -type f -regextype posix-egrep -regex 'dir1/.+|dir2/.+|dir3/.+|dir4/.+'
나도 posix-extended
그것을 시도했습니다. 이 파일을 어떻게 나열할 수 있나요?
답변1
foo
, bar
및 baz
3개의 폴더에 있는 모든 파일을 검색하려면 *.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 '/)