Intereting Posts
Использование нестандартного местоположения для служб avahi Подключить файл изображения без разрешения root? ld-uClibc.so отсутствует Объединить документ PDF, но с условиями Тестирование проблем AAC (Kubuntu 16.04 + различные приложения) Установите скорость прокрутки и введите команду на клавиатуре дисплея на Mint 16 Каталог «диалога открытых файлов» в Кикаде Сменить рабочее пространство между двумя мониторами на gnome для печати адресного пространства процесса в ubuntu 12.04 Как статически назначать сетевые интерфейсы USB-адаптерам беспроводной локальной сети как увеличить использование памяти вручную? Усечение имен папок после первого пробела Будет ли Open VPNC-клиент Linux (red-hat) подключаться к шлюзам или шлюзам Nortel VPN? Обработка текста: конвертировать текст таблицы содержимого в формат закладки djvu? Почему гора молча терпит неудачу для меня?

Пакетное переименование "case duplicates"

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

Есть ли простой способ командной строки для поиска и замены таких имен файлов, что-то вроде «конвертировать все имена файлов в нижний регистр, если это приводит к тому, что два файла с тем же именем добавляют« 1 »к одному из них»?

Если вы хотите избежать повторного создания колеса, вы можете использовать встроенную способность команды mv выполнять автоматические резервные копии с нумерованием; если ваша оболочка поддерживает преобразование случая изначально, что может быть так же просто, как

 for f in *; do mv --backup=numbered -- "$f" "${f,,}"; done 

Формат резервного копирования по умолчанию: .~1~ , например

 SOME FILE sOmE fIlE some file 

тогда

 $ for f in *; do mv -v --backup=numbered -- "$f" "${f,,}"; done 'SOME FILE' -> 'some file' (backup: 'some file.~1~') 'sOmE fIlE' -> 'some file' (backup: 'some file.~2~') mv: 'some file' and 'some file' are the same file 

Если вам не нравится нумерация по умолчанию, вы всегда можете изменить это после факта; если ваша система включает команду rename основе perl, которая может быть чем-то вроде

 $ rename -v -- 's/\.~(\d+)~/$1/' *.~*~ some file.~1~ renamed as some file1 some file.~2~ renamed as some file2 

наконец,

 $ ls some file some file1 some file2