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