Официальная возможность получить лицензионный софт бесплатно.
Giveaway of the Day
Это не реклама!

Щелкните для получения прогноза по Биробиджану


пятница, 5 ноября 2010 г.

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

Полез я в убунте в папочку ~/Ubuntu\ One и обнаружил, что есть там у меня каталог с несколькими тысячами мелких файлов. После какого-то сбоя синхронизации, почти ко всем этим файлам дописалось расширение ".u1conflict". Я встал в тупик: как же вернуть имена этих файлов в исходное состояние? Вручную - так я раньше свихнусь...

Помогла команда basename. Написал вот такую простенькую команду, которая сделала за меня всю черновую работу.:


for AA in *.u1conflict; do mv $AA `basename $AA .u1conflict`;done

По порядку:

for AA in *.u1conflict; do - цикл по всем файлам с расширением u1conflict.

mv $AA - переименовывает переданный ей файл, $AA - первый параметр, исходное имя. Обратите внимание на то, что в for было просто AA, а при использовании в качестве параметра добавляется "$"!

`команда` - именно "обратные" апострофы (клавиша с тильдой, самая левая в верхнем ряду стандартной клавиатуры), сначала выполняется заключенная в них команда, а потом ее вывод становится параметром другой команды, в данном случае - вторым параметром команды mv, то есть новым именем файла.

basename $AA .u1conflict - берет переданное ей имя файла, отсекает от него, если есть, имена каталогов слева от собственно имени файла, и, если указан, то отсекает и суффикс, он же - расширение. Опять же - чтобы не возникло ошибки "файл не найден", не забываем про "доллар" перед именем переменной цикла.

;done - конец цикла

При желании эту команду можно доработать, чтобы она выполняла рекурсивный обход каталогов и тем самым полностью автоматизировать процесс. Но сейчас мне лень этим заниматься.

Много дополнительной интересной информации можно найти здесь.
Дополнительный совет: man rename

Комментариев нет:

Отправить комментарий

Пожалуйста, воздержитесь от грубостей и персональных нападок.
Я не против матерщины, но она должна быть уместной и использоваться для выражения эмоций, а не в качестве основного средства выражения мыслей.