Изменить расширения файлов нескольких файлов в каталоге с помощью терминала /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 *
Другие вопросы по тегам