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