Используйте кавычки:
mv -- "$file" "$(echo "$file" | sed ...)"
Иначе mv
видит несколько аргументов. Имя файла с именем имя файла с пробелами
будет 4 аргументами для mv
. Поэтому ошибка: при перемещении нескольких файлов последний аргумент должен быть каталогом
. Когда mv
имеет более двух аргументов, предполагается, что вы хотите переместить несколько файлов в каталог (который будет последним аргументом).
Однако похоже, что вы хотите удалить первые 5 символов из имени файла. Это можно сделать проще с помощью bash
:
mv -- "$file" "${file:5}"
Edit : Я добавил флаг -
благодаря комментарию @ pabouk . Теперь корректно обрабатываются и файлы, начинающиеся с тире -
.
Вы можете использовать prename, которое часто распространяется вместе с Perl. (Например, в Debian / usr / bin / prename устанавливается пакетом perl
.) Если не упакован вашим дистрибутивом (ищите prename
и переименовать
в местах обычных двоичных файлов), он доступен для загрузки из ряда мест, например, здесь , здесь или здесь .
Этот сценарий принимает регулярное выражение, применяемое к каждому из имен файлов, и набор имен файлов, и изменяет имена этих файлов в соответствии с этим регулярным выражением.
Например, вы можете ввести
prename -v -n 's/^.{5}//' *
, чтобы показать, что произойдет, если вы удалите первые пять символов в именах файлов. Чтобы выполнить переименование, просто удалите -n
.