LINUX.ORG.RU

Массовое переименование файлов в bash

 


0

1

Доброго времени суток!

Подскажите, пожалуйста, как массово переименовать файлы в директории на bash?

$ ll
итого 24
drwxrwxr-x  2 alex2020 alex2020  4096 дек  4 12:00 ./
drwxr-xr-x 11 alex2020 alex2020 20480 дек  4 11:59 ../
-rw-rw-r--  1 alex2020 alex2020     0 дек  4 12:00 Название файла 1
-rw-rw-r--  1 alex2020 alex2020     0 дек  4 12:00 Название файла 2
-rw-rw-r--  1 alex2020 alex2020     0 дек  4 12:00 Название файла 3
-rw-rw-r--  1 alex2020 alex2020     0 дек  4 12:00 Название файла 4
-rw-rw-r--  1 alex2020 alex2020     0 дек  4 12:00 Название файла 5

В названиях файлов присутствуют пробелы, переименовать файлы нужно так, чтобы названия были такого вида Aвтор - Название файла N (вместо N - номер файла, автор один и тот же).

При попытке переименовать в цикле таким образом:

$ for i in $(ls); do mv "$i" "Автор - $i"; done
mv: не удалось выполнить stat для 'Название': Нет такого файла или каталога
mv: не удалось выполнить stat для 'файла': Нет такого файла или каталога
mv: не удалось выполнить stat для '1': Нет такого файла или каталога
mv: не удалось выполнить stat для 'Название': Нет такого файла или каталога
mv: не удалось выполнить stat для 'файла': Нет такого файла или каталога
mv: не удалось выполнить stat для '2': Нет такого файла или каталога
mv: не удалось выполнить stat для 'Название': Нет такого файла или каталога
mv: не удалось выполнить stat для 'файла': Нет такого файла или каталога
mv: не удалось выполнить stat для '3': Нет такого файла или каталога
mv: не удалось выполнить stat для 'Название': Нет такого файла или каталога
mv: не удалось выполнить stat для 'файла': Нет такого файла или каталога
mv: не удалось выполнить stat для '4': Нет такого файла или каталога
mv: не удалось выполнить stat для 'Название': Нет такого файла или каталога
mv: не удалось выполнить stat для 'файла': Нет такого файла или каталога
mv: не удалось выполнить stat для '5': Нет такого файла или каталога

Возникает ошибка из-за пробелов в названиях файлов. Как можно это реализовать? Спасибо.

Ответ на: комментарий от anonymous

Спасибо, помогло!

Не могли бы Вы подсказать, почему возникает ошибка в первом случае, но не возникает во втором?

alex2020
() автор топика
Ответ на: комментарий от alex2020

почему возникает ошибка в первом случае, но не возникает во втором?

Из-за пробелов.

anonymous
()
Ответ на: комментарий от alex2020

Токенизация. В первом случае твой совсем не знает, как разбивать ввод, во втором догадывается. С ls можно переписать как

ls | while read i; do mv "$i" "Автор - $i"; done

или просто использовать PowerShell.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.