У меня есть родительская папка с именем «parent_folder» с множеством подпапок, в этих подпапках находится файл с именем «foo.mp4».
Я могу легко найти эти файлы, выполнив это:
mymacbook:parent_folder username$ find ./ -name "foo.mp4" -exec echo {} \;
Теперь это возвращает путь каждого файла, относительно parent_folder /
./path/to/foo.mp4
Как я могу вернуть только путь, без имени файла?
-printf
%h
ведущие каталоги имени файла (все, кроме последнего элемента). Если имя файла не содержит косых черт (поскольку оно находится в текущем каталоге), спецификатор% h расширяется до «.» ,find ./ -name "foo.mp4" -printf "%h\n"
напечатает путь к каждому найденному файлу (один за другим). Более того, как обычно, никто не использует,-exec echo {}
поэтому есть-print
(по умолчанию даже опущено) илиprintf
действие.-printf
только для GNU. ОП упоминает OS / X (система BSD).Ответы:
С
GNU
находкой:С другими
find
s предоставленные имена каталогов не содержат символов новой строки:Или:
хотя это означает запуск одной
dirname
команды на файл.Если вам нужно выполнить команду для этого
path
, вы можете сделать (стандартный синтаксис):Хотя в этом случае вы можете использовать
-execdir
(расширение BSD также доступно в GNUfind
), котороеchdir()
находится в каталоге файла:Остерегайтесь, хотя, в то время как реализация GNU
find
расширится{}
до./filename
здесь, BSD расширится доfilename
. Здесь все в порядке, поскольку имя файла передается в качестве аргумента опции и всегда вfeatured.mp4
любом случае, но для других случаев вам может потребоваться принять во внимание, что имя файла может начинаться с-
или+
(и восприниматься командой как опция) или содержать=
(и быть понятым как присвоение переменной, например, awk) или другими символами, вызывающими проблемы такого родаperl -p/n
(не все из них исправлены префиксом GNUfind
,./
хотя в этом случае) и т. д., которые вы, возможно, должны принять во внимание ,источник
find .
подаете заявление , в качестве dirname вы будете иметь. вместо всего пути.find ./ -name "featured.mp4" -exec ffmpeg -i "{}" -c:v libvpx -b:v 1M -c:a libvorbis [NEED DIRECTORY HERE] featured.webm \;
Я использую второе предложение, которое вы упомянули.Команда ниже также может быть использована для получения только сведений о каталоге.
источник