Автор Тема: Групповое переименование файлов  (Прочитано 4494 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн volandlm

  • Прохожий
  • *
  • Автор темы
  • Сообщений: 8
Групповое переименование файлов
« : Ноябрь 03, 2010, 11:48:07 »
Предположим, что перед нами стоит задача во всех файлах с расширением ".ext", в достаточно разветвлённом дереве каталогов, заменить пробел на нижнее подчёркивание. Зачем? А просто нам захотелось разместить эти файлы в сети Интернет. Но ведь тогда все пробелы в ссылках будут заменены на "%20", что не "есть хорошо". Поэтому, без лишних слов, приступим к решению поставленной задачи.

Поскольку мы выбрали для использования unix-like систему, то решать задачу будем в консоли. Как известно, консоль является самой сильной стороной таких операционных систем. Поэтому и будем использовать её для всех задач, для которых это возможно, и оставим графические свисто-перделки для работы с видео и графикой.

Для начала нам нужно найти все такие файлы с нужным расширением (предполагается, что мы уже находимся на вершине нужного дерева каталогов, то есть выполнили команду cd /user/directory):
find . -name "*.ext" | grep "\ "   
Далее, будем просматривать все найденные файлы в цикле по одному:
while read i; do "заменять_пробелы"; done
Далее, собственно замена пробелов:
mv "$i" "`echo $i | sed s/\ /_/g`"
Теперь, когда стало ясно, "кто на ком стоял", объединим все шаги в одну последовательность:
find . -name "*.ext" | grep "\ " | while read i; do mv "$i" "`echo $i | sed s/\ /_/g`"; done
Предупреждение. Если количество файлов отличается от нуля меньше, чем на машинный эпсилон, то городить вышеприведённый огород нет никакого смысла!
"Машина должна работать, а человек - думать" ("Machines should work; people should think"), IBM.