2

У меня есть каталог 'main', содержащий много подкаталогов, и в некоторых из этих подкаталогов у меня есть имена файлов, которые содержат двоеточие. Я загрузил «главный» каталог в репозиторий GitHub из Linux, но столкнулся с проблемой, когда попытался извлечь из этого репозитория на компьютере с Windows, поскольку Windows не допускает двоеточия в именах файлов.

Как я могу рекурсивно найти все имена файлов с двоеточием в каталоге «main» с помощью терминала Linux, а затем заменить двоеточие, скажем, символом тире (-)?

1 ответ1

5
find /path/to/directory -type f -name "*:*" -exec rename -n 's/:/-/g' {} +

(Если эта команда не работает для вас, см. Примечание о совместимости в конце этого ответа.)

Это базовая безопасная версия, которая печатает только то, что произойдет. Чтобы это произошло, избавьтесь от опции -n .

Он работал бы без -name "*:*" но хорошо бы, чтобы команда find передавала только имена файлов, которые должны быть изменены, потому что это ускоряет выполнение всей команды.

Это работает так:

  • find находки ...
    • ... в /path/to/directory ...
    • ... все файлы (-type f)...
    • ... с соответствующими именами (-name "*:*"), ...
    • ... затем выполняет rename (при необходимости несколько раз)...
    • ... с шаблоном для замены : на - ...
    • ... для всех найденных файлов одновременно несколько файлов ({} +).

Заметки:

  • Команда не переименовывает каталоги, и это сделано специально.
  • Переименование может не работать с некоторыми необычными символами в имени файла (например, перевод строки). Скорее всего, у вас нет таких имен файлов, так что это скорее официальное примечание.

Примечание о совместимости

В решении используется rename сценария Perl из пакета rename , доступного в Debian, Ubuntu. Другие дистрибутивы могут иметь rename из util-linux .

Это руководство предполагает, что решение для rename без Perl должно быть:

find /path/to/directory -type f -name "*:*" -execdir rename -n ':' '-' {} +

(Опять же, удалите -n если это выглядит правильно.) Я не проверял это все же. Я думаю, что он заменит только первое двоеточие в имени файла. Обходной путь - повторять команду (без -n , с -v), пока не останется двоеточий.

В качестве альтернативы вы можете получить скрипт Perl из архива, доступного на этом сайте (в настоящее время File-Rename-0.20.tar.gz , скрипт называется rename.PL). Смотрите также этот вопрос.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .