하위 폴더가 많은 “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