Я пытаюсь переименовать кучу музыкальных треков в каталоге, но я получил эту ошибку:
При перемещении нескольких файлов последний аргумент должен быть каталогом
Это скрипт:
for file in * ; do
mv $file $(echo $file |sed 's/^.\{5\}//g')
done
Это работает для файла без пробелов, как мне изменить этот скрипт?
-
. Вместоecho "$file"
использованияprintf '%s\n' "$file"
.mv
. :) Вы справились с этим делом :) --- Я имел в виду проблему сecho
самим собой. Например GNU эхо (как автономный и Баш встроенный) не будет печатать эти строки:-n
,-e
и-E
. Даже в соответствии с определением POSIX невозможноecho
надежно использовать, потому что определенные ситуации не определены. XSI-совместимыйecho
будет интерпретировать escape-последовательности обратной косой черты. ---printf '%s\n'
не имеет таких нежелательных и зависящих от реализации эффектов.Вы можете использовать prename, который часто распространяется вместе с Perl. (Например, в Debian
perl
пакет / usr / bin / prename устанавливается пакетом.) Если он не упакован вашим дистрибутивом (ищитеprename
иrename
в обычных местах двоичных файлов), он доступен для загрузки из ряда мест, таких как например здесь , здесь или здесь .Этот сценарий принимает регулярное выражение для применения к каждому из имен файлов и набора имен файлов и изменяет имена этих файлов в соответствии с этим регулярным выражением.
Например, вы можете сделать
чтобы показать, что произойдет, если вы удалите первые пять символов в именах файлов. Чтобы действительно выполнить переименование, вы просто удалите
-n
.источник