У меня есть серия каталогов, содержащих несколько mp3-файлов с именами файлов 001.mp3, 002.mp3, ..., 030.mp3.Сортировка вывода find перед запуском команды в -exec
Что я хочу сделать, это объединить их в единый mp3-файл и добавить к нему некоторые метаданные.
Вот то, что я в данный момент (удалить некоторые определения переменных, для ясности):
#!/bin/bash
for d in */; do
cd $d
find . -iname '*.mp3' -exec lame --decode '{}' - ';' | lame --tt "$title_prefix$name" --ty "${name:5}" --ta "$artist" --tl "$album" -b 64 - $final_path"${d%/}".mp3
cd ..
done
Иногда это работает, и я получаю один файл со всеми «дорожки» в правильном порядке.
Однако чаще всего я получаю один файл со всеми «дорожками» в обратном порядке, что на самом деле не очень хорошо.
Что я не могу понять, так это то, что порядок варьируется между разными сценами сценария, поскольку все каталоги содержат один и тот же набор имен файлов. Я вылил на страницу man и не могу найти опцию сортировки для поиска.
Я мог бы запустить find . -iname '*.mp3' | sort -n >> temp.txt
, чтобы поместить файлы во временный файл, а затем попытаться пройти через него, но я не могу заставить это работать с хромым.
Есть ли способ разместить сортировку до того, как поиск запускает exec? Я могу найти множество примеров здесь и в других местах, чтобы сделать это с помощью -exec ls
, но не там, где нужно выполнить что-то более сложное с помощью exec.
Нажимая границы моих собственных способностей к bash, но могу ли я сделать что-то вроде 'find. -iname '* .mp3' | sort -n | xargs '? Если да, то как мне переделать хромую команду для ввода ввода? –
yknivag
temp.txt включает полный путь или только последовательность имен файлов? –
Я бы предпочел не использовать временный файл вообще, если это возможно. Но он, предположительно, может быть сконструирован так, чтобы содержать любой тип имени файла. – yknivag