내부에 많은 하위 폴더가 있는 "parent_folder"라는 상위 폴더가 있고 해당 하위 폴더 안에는 "foo.mp4"라는 파일이 있습니다.
다음을 수행하면 이러한 파일을 쉽게 찾을 수 있습니다.
mymacbook:parent_folder username$ find ./ -name "foo.mp4" -exec echo {} \;
이제 parent_folder/를 기준으로 각 파일의 경로를 반환합니다.
./path/to/foo.mp4
파일 이름이 아닌 경로만 반환하려면 어떻게 해야 합니까?
답변1
그리고 GNU
다음을 찾으세요:
find . -name foo.mp4 -printf '%h\n'
다른 의 경우 find
제공된 디렉토리 이름에 개행 문자가 포함되어 있지 않습니다.
find . -name foo.mp4 |
LC_ALL=C 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 {} +
이 경우에는 파일 디렉토리에 있는 GNU -execdir
에서도 사용 가능한 BSD 확장을 사용할 수 있습니다 .find
chdir()
find . -name "featured.mp4" -execdir \
ffmpeg -i {} -c:v libvpx -b:v 1M -c:a libvorbis . featured.webm \;
그러나 GNU 구현은 여기에서 find
확장되지만 BSD 구현은 파일 이름이 옵션에 인수로 전달되고 항상 그러하기 때문에 여기서는 문제가 되지 않습니다. 그러나 다른 용도에서는 다음을 고려해야 합니다. 파일 이름은 or 로 시작하거나 (명령에서 옵션으로 이해됨) 포함하거나 (예를 들어 awk에 대한 변수 할당으로 이해될 수 있음), 그렇지 않으면 원인이 될 수 있습니다.{}
./filename
filename
featured.mp4
-
+
=
이런 종류의 문제는 다음과 관련이 있습니다.perl -p/n
find
(이 경우에도 GNU 의 ./
접두사 로 모두 고정되는 것은 아닙니다 .)
답변2
아래 명령을 사용하여 디렉터리 세부 정보만 가져올 수도 있습니다.
find ./ -name "foo.mp4" | rev | cut -d"/" -f2- | rev