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