Изменить расширения файлов нескольких файлов в каталоге с помощью терминала /bash?
Я разрабатываю простой launchdaemon, который копирует файлы из одного каталога в другой. Я получил файлы для передачи в порядке.
Я просто хочу, чтобы файлы в каталоге были.mp3 вместо.dat
Некоторые файлы выглядят так:
6546785.8786.dat
3678685.9834.dat
4658679.4375.dat
Я хочу, чтобы они выглядели так:
6546785.8786.mp3
3678685.9834.mp3
4658679.4375.mp3
Это то, что у меня есть в конце скрипта bash для переименования расширений файлов.
cd $mp3_dir
mv *.dat *.mp3
exit 0
Проблема в том, что файл выглядит как *.mp3 вместо 6546785.8786.mp3
и когда другой файл 6546785.8786.dat импортируется в $ mp3_dir, *.mp3 перезаписывается новым.mp3
Мне нужно переименовать только расширения файла.dat в.mp3 и сохранить имя файла.
Идеи? Предложения?
2 ответа
Пытаться:
for file in *.dat; do mv "$file" "${file%dat}mp3"; done
Или, если ваша оболочка имеет это:
rename .dat .mp3 *.dat
Теперь, почему ваша команда не работала: во-первых, более чем очевидно, что у вас был только один файл в каталоге, когда он был переименован в *.mp3
, иначе mv
потерпел бы неудачу с *.mp3: not a directory
,
И mv НЕ работает с глобусами файлов, это оболочка, которая расширяет глобусы. Что означает, если у вас был этот файл в каталоге:
t.dat
и вы набрали:
mv *.dat *.mp3
оболочка расширилась бы *.dat
в t.dat
, Тем не менее, как ничего не будет соответствовать *.mp3
оболочка оставила бы все как есть, что означает полностью развернутую команду:
mv t.dat *.mp3
Который создаст файл с именем, буквально, *.mp3
,
Если, с другой стороны, у вас было несколько файлов с именем *.dat
, как в:
t1.dat t2.dat
команда расширилась бы до:
mv t1.dat t2.dat *.mp3
Но это не удастся: если есть более двух аргументов mv
, он ожидает последний аргумент (т.е. *.mp3
) быть каталогом.
Для любого на Mac это довольно легко, если у вас есть BREW, если у вас нет пива, тогда мой совет - получите его. тогда при установке просто сделай это
$ brew install rename
затем, как только переименование установлено, просто введите (в каталоге, где находятся файлы)
$ rename -s dat mp3 *