Изменить расширения файлов нескольких файлов в каталоге с помощью terminal / bash?

Я разрабатываю простой launchdaemon, который копирует файлы из одного каталога в другой. Я получил файлы для передачи.

Я просто хочу, чтобы файлы в каталоге были .mp3 вместо .это

некоторые файлы выглядят так:

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

Мне нужно переименовать просто the .расширения файлов 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 не делает никакой магии с файловыми глобусами, это shell что расширяет комки. Что означает, если у вас этот файл в каталог:

t.dat

и вы набрали:

mv *.dat *.mp3

оболочка расширилась бы *.dat to t.dat. Однако, как ничто не будет соответствовать *.mp3, оболочка оставила бы его как есть, то есть полностью развернутая команда:

mv t.dat *.mp3

который создаст файл с именем, буквально,*.mp3.

если, с другой стороны, у вас было несколько файлы с именем *.dat, например:

t1.dat t2.dat

команда будет иметь расширено до:

mv t1.dat t2.dat *.mp3

но это не удастся: если есть больше двух аргументов mv, он ожидает последнего аргумента (т. е. *.mp3), чтобы быть каталогом.


для тех, кто на mac, это довольно легко, если у вас есть BREW, если у вас нет brew, то мой совет-получить его. тогда при установке просто сделайте это

$ brew install rename

затем после установки переименования просто введите (в каталоге, где находятся файлы)

$ rename -s dat mp3 *