Найти дубликаты по filemane

У меня есть около 167 тыс. Файлов в одной папке (на данный момент) и переименована с помощью этого скрипта здесь: переименование группы файлов, но только часть заголовка.
Как я могу найти дубликаты файлов по их именам (только цифры в этом конкретном месте) и удалить самый старый файл:
Aaaaaaa.bbb - 0000125 tag tag_tag 9tag Aaaaaaa.bbb - 0000002 tag 9tag Aaaaaaa.bbb - 0000002 tag tag_tag 9tag

Все инструменты, которые я использовал, не обеспечивали такую ​​функциональность, поэтому только сценарий может помочь.

1 ответ

Ниже вот find, sort а также awk один лайнер.

Основная идея состоит в том, чтобы перечислить файлы, отсортировать их численно (что работает, если Aaaaaaa.bbb и сами теги не являются числами), а затем позволить awk сохранять каждое 3-е поле имен файлов в prev переменной и сравните ее с текущим значением поля 3. Если они совпадают, выведите сообщение.

find . -type f -print | sort --numeric | awk '{if(prev == $3) print $0" is duplicate of "$prevEntry}{ prev=$3; prevEntry=$0}'

Ниже небольшая демонстрация:

    $ seq 6 10 | xargs printf "%07d\n" | xargs -I {} touch "Aaaaaaa.bbb - {} tag 9tag" 

    $ seq 00001 00020 | xargs printf "%07d\n" | xargs -I {} echo "Aaaaaaa.bbb - {} tag tag_tag 9tag"

$ find . -type f -print | sort --numeric | awk '{if(prev == $3) print $0" is duplicate of "$prevEntry}{ prev=$3; prevEntry=$0}'

    ./Aaaaaaa.bbb - 0000006 tag tag_tag 9tag is duplicate of ./Aaaaaaa.bbb - 0000006 tag tag_tag 9tag
    ./Aaaaaaa.bbb - 0000007 tag tag_tag 9tag is duplicate of ./Aaaaaaa.bbb - 0000007 tag tag_tag 9tag
    ./Aaaaaaa.bbb - 0000008 tag tag_tag 9tag is duplicate of ./Aaaaaaa.bbb - 0000008 tag tag_tag 9tag
    ./Aaaaaaa.bbb - 0000009 tag tag_tag 9tag is duplicate of ./Aaaaaaa.bbb - 0000009 tag tag_tag 9tag
    ./Aaaaaaa.bbb - 0000010 tag tag_tag 9tag is duplicate of ./Aaaaaaa.bbb - 0000010 tag tag_tag 9tag
Другие вопросы по тегам