Я пытаюсь обрабатывать файлы DVD, которые находятся во многих разных местах на диске. Все, что у них общего, это то, что они (каждый набор входных файлов) находятся в каталоге с именем VIDEO_TS
. Выходом в каждом случае будет один файл с именем родителя этого каталога.find piped to xargs with complex command
Я знаю, что я могу получить полный путь к каждому каталогу с:
find /Volumes/VolumeName -type d -name "VIDEO_TS" -print0
и я могу получить родительский каталог по конвейеру к xargs:
find /Volumes/VolumeName -type d -name "VIDEO_TS" -print0 | xargs -0 -I{} dirname {}
, и я также знаю, что может получить имя родительского каталога самостоятельно, добавив:
| xargs -o I{} basename {}
Что я не могу понять как передать эти параметры, например, HandBrakeCLI:
./HandBrakeCLI -i /path/to/filename/VIDEO_TS -o /path/to/convertedfiles/filename.m4v
я здесь прочитал о возможности расширения оболочки и подозревают, что собирается помочь здесь (не используя имя-каталога или базовое имя для начала), но чем больше я читал больше запутывается я получаю!
'basename' вернет' имя_файла'/'имя_папки'. 'dirname' вернет путь к родительскому каталогу. – hek2mgl
Что-то вроде: 'для video_ts в $ (find ...); do ./HandBrakeCLI -i $ {video_ts} -o /path/to/convertedfiles/filename.m4v; done' – ash
Я получаю, как это приведет ко мне все файлы, чтобы действовать как vars (а затем запустить HandBrakeCLI на них), но механизм для извлечения (целевого) имени файла и его использования в цикле for еще не существует - если я чего-то не упущу. – Lorccan