bash find : 찾은 파일의 디렉토리를 얻는다 찾을 수 있습니다. mymacbook:parent_folder username$ find ./

하위 폴더가 많은 “parent_folder”라는 상위 폴더가 있는데이 하위 폴더에는 “foo.mp4″라는 파일이 있습니다.

이렇게하면 이러한 파일을 쉽게 찾을 수 있습니다.

mymacbook:parent_folder username$ find ./ -name "foo.mp4" -exec echo {} \;

이제 parent_folder /를 기준으로 각 파일의 경로를 반환합니다.

./path/to/foo.mp4

파일 이름없이 경로 만 반환하려면 어떻게해야합니까?



답변

GNU찾기 :

 find . -name foo.mp4 -printf '%h\n'

다른 find디렉토리 이름 과 함께 제공된 디렉토리 이름에는 개행 문자가 포함되지 않습니다.

 find . -name foo.mp4 | sed 's|/[^/]*$||'

또는:

 find . -name foo.mp4 -exec dirname {} \;

그러나 이것은 dirname파일 당 하나의 명령을 실행하는 것을 의미 합니다.

해당 명령을 실행 해야하는 경우 path(표준 구문)을 수행 할 수 있습니다.

 find . -name "featured.mp4" -exec sh -c '
   for file do
     dir=${file%/*}
     ffmpeg -i "$file" -c:v libvpx -b:v 1M -c:a libvorbis "$dir" featured.webm
   done' sh {} +

이 경우 비록, 당신은 사용할 수 있습니다 -execdir(GNU에서 사용할 수도 BSD 확장 find), chdir()파일의 디렉토리들 :

 find . -name "featured.mp4" -execdir \
   ffmpeg -i {} -c:v libvpx -b:v 1M -c:a libvorbis . featured.webm \;

의 GNU 구현하면서 것을 불구하고주의 find확장됩니다 {}./filename여기에, BSD의 것들로 확장 filename. 파일 이름이 옵션에 대한 인수로 전달하고 항상 그대로 확인은 여기 featured.mp4어쨌든하지만, 다른 용도로 사용하면 파일 이름으로 시작할 수 있음을 고려 할 수 있습니다 -또는 +(및 명령에 의해 옵션으로 이해) 또는 포함 =(그리고 예를 들어 AWK에 의한 변수 할당으로 이해할 수), 또는 다른 문자의 원인 과 이러한 문제를perl -p/n (모든 GNU에 의해 고정 된 그들 find‘의 ./접두사하지만이 경우에) 당신이 고려해야 할 수도 등, .


답변

아래 명령을 사용하여 디렉토리 세부 정보 만 가져올 수 있습니다.

find ./ -name "foo.mp4" | rev | cut -d"/" -f2- | rev


답변