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

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

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

1
задан 13 April 2017 в 15:23

1 ответ

Ниже вот a 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
0
ответ дан 30 September 2019 в 05:45

Другие вопросы по тегам:

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