Удалите определенные символы из нескольких файлов с помощью whitepsaces


8
23.10.2015, 08:49
2 ответа

Используйте кавычки:

mv -- "$file" "$(echo "$file" | sed ...)"

Иначе mv видит несколько аргументов. Имя файла с именем имя файла с пробелами будет 4 аргументами для mv . Поэтому ошибка: при перемещении нескольких файлов последний аргумент должен быть каталогом . Когда mv имеет более двух аргументов, предполагается, что вы хотите переместить несколько файлов в каталог (который будет последним аргументом).


Однако похоже, что вы хотите удалить первые 5 символов из имени файла. Это можно сделать проще с помощью bash :

mv -- "$file" "${file:5}"

Edit : Я добавил флаг - благодаря комментарию @ pabouk . Теперь корректно обрабатываются и файлы, начинающиеся с тире - .

14
27.01.2020, 20:09

Вы можете использовать prename, которое часто распространяется вместе с Perl. (Например, в Debian / usr / bin / prename устанавливается пакетом perl .) Если не упакован вашим дистрибутивом (ищите prename и переименовать в местах обычных двоичных файлов), он доступен для загрузки из ряда мест, например, здесь , здесь или здесь .

Этот сценарий принимает регулярное выражение, применяемое к каждому из имен файлов, и набор имен файлов, и изменяет имена этих файлов в соответствии с этим регулярным выражением.

Например, вы можете ввести

prename -v -n 's/^.{5}//' *

, чтобы показать, что произойдет, если вы удалите первые пять символов в именах файлов. Чтобы выполнить переименование, просто удалите -n .

3
27.01.2020, 20:09

Теги

Похожие вопросы