Изменить расширения файлов нескольких файлов в каталоге с помощью терминала / bash? - PullRequest
8 голосов
/ 18 декабря 2011

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

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

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

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

Iнужно переименовать просто расширения файла .dat в .mp3 и сохранить имя файла.

Идеи?Предложения?

Ответы [ 2 ]

27 голосов
/ 18 декабря 2011

Попробуйте:

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) будет каталогом.

15 голосов
/ 15 ноября 2013

Для любого на Mac это довольно легко, если у вас есть BREW, если у вас нет пива, тогда мой совет - получите его. тогда при установке просто сделайте это

$ brew install rename

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

$ rename -s dat mp3 *
...