Нахождение дубликатов файлов, по имени игнорирующих регистр в подкаталогах

Произведите операторы перемещения и оцените их в одном выстреле:

ls -d /home/*/tmp | sed 's/.*t/mv &mp &e/' | sh -xv
3
31.10.2014, 18:43
2 ответа

Это работает для основных имён файлов, но не будет работать для файлов с возвратом каретки и, возможно, для нескольких других случаев с краями.

FilesNoPath=$(find . -printf "%f\n")
FilesWithPath=$(find .)

oldIFS=$IFS
IFS=$'\n'
for filename in $FilesNoPath;
do
    Matches=$(echo "$FilesWithPath" | grep -i "/$filename$")
    if [ $(echo "$Matches" | wc -l) -gt 1 ]
    then
        echo Found matches:
        echo "$Matches"
        FilesWithPath=$(echo "$FilesWithPath" | grep -vi "/$filename$")
    fi
done
IFS=$oldIFS

Вы можете заменить . в двух командах поиска с помощью /path/to/your/files, если вы хотите, чтобы на выходе был показан полный путь и/или вы не хотите выполнять его из родительского каталога соответствующих файлов.

2
27.01.2020, 21:16
121 --- 77655-
find . -printf "%p %f\n" | sort -f -k2 | uniq -Di -f1

Укажите ваш выбор исходного каталога для Найти Если вы не хотите начать с . . Добавить -Type f Если вы хотите просто файл имена.

  • Команда Найти Команда создает список имен файлов (и каталогов), в порядке каталога (I.E., случайном порядке, насколько вы касаетесь).
  • -PrintF "% p% f \ n" печатает полный путь (относительно . ) и имя файла.
  • Сортировка -F недолго для сортировка - сортировка - сортировка , т. Е. Он сортирует список файла в случае нечувствительности к регистру
  • -K2 . второе поле в качестве ключа сортировки.
  • UNIQ -DI -F1 не хватает Uniq --All-diepreted Case-case --skip-поля = 1 , то есть он показывает (все) строки вывода Из находятся , которые происходят неоднократно, на основе случая нечувствительности к случаю сравнения второго поля и за пределы (т. Е. Имено то же самое (нечувствительное к регистру) файла).

Это должно дать вам нужный вывод, за исключением каждую строку произойдет имя файла в конце. Если вы хотите избавиться от этого, труба в SED 'S /. * //' .

Пара Gotchas:

  • Если у вас есть каталоги , чьи имена одинаковы, кроме случаев, И они содержат файлы, имена которых одинаковы, за исключением случаев, например,.,

     Документы / design.doc
    Документы / design.doc.
     

    Тогда они будут перечислены.

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

3
27.01.2020, 21:16

Теги

Похожие вопросы