BASH-скрипт для изменения имен файлов с одинаковыми именами, но в разных случаях - PullRequest
2 голосов
/ 22 августа 2011

Я пытаюсь написать bash-скрипт, который будет рекурсивно искать каталог, находить файлы с одинаковыми именами, но разными регистрами, и переименовывать их.

Например, каталог, содержащий file.txt и File.txt, файл file.txt останется, а File.txt будет File.0 (или любым числом, если сохраняются обе копии.)

Вот код, который у меня есть, хотя я вижу проблему. Строка для поиска дубликатов имен изменяет регистр в путях к файлам, делая их недействительными. Я не могу придумать способ обнаружить дубликаты, не удаляя регистр в путях.

#!/bin/bash

#Scan for duplicates
find $1 -name "*"| tr 'A-Z' 'a-z' | sort | uniq -d > ~/case.tmp

#Count changes
i=0

#Make changes
for line in `cat ~/case.tmp`
    do mv $line $line.$i
    let i++
    done

#Print Results
echo "$i file(s) renamed".

Спасибо за помощь.

1 Ответ

2 голосов
/ 22 августа 2011

Вы пробовали что-то вроде

find $1 | sort -f | uniq -i -d -D

Пояснение:

  • sort -f: игнорировать регистр
  • uniq -i -d -D: игнорировать регистр (-i), печатать повторяющиеся строки (-d), печатать все дублирующиеся строки (-D)

Оттуда должно быть легко понять, что вы хотите сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...