1

У меня есть каталог, полный zip-файлов, которые содержат много файлов. Они созданы программным обеспечением, и это в настоящее время не может быть исправлено. Я пытался работать с fdupes , но этот процесс занял слишком много времени, потому что там около 50 тыс. Файлов. Я знаю, что все файлы одинакового размера являются дубликатами без каких-либо исключений.

Так как же теперь я могу удалить все ненужные файлы? Я уже получил эту команду, которая печатает мне файлы для хранения, но я не знаю, как преобразовать это в oneliner, чтобы использовать его как cronjob.

find . -type f -printf "%s %p\n" | grep "zip" | sort -n | uniq -d --check-chars=10

-rw-r--r--  1 root root 2550472 Apr 22 14:40 save_2016-04-22-14_40_01.zip
-rw-r--r--  1 root root 2550472 Apr 22 14:45 save_2016-04-22-14_45_01.zip
-rw-r--r--  1 root root 2550472 Apr 22 14:50 save_2016-04-22-14_50_01.zip
-rw-r--r--  1 root root 2550472 Apr 22 14:55 save_2016-04-22-14_55_01.zip
-rw-r--r--  1 root root 2550472 Apr 22 15:00 save_2016-04-22-15_00_01.zip
-rw-r--r--  1 root root 2550472 Apr 22 15:05 save_2016-04-22-15_05_01.zip
-rw-r--r--  1 root root 2550472 Apr 22 15:10 save_2016-04-22-15_10_01.zip
-rw-r--r--  1 root root 2550472 Apr 22 15:15 save_2016-04-22-15_15_01.zip
-rw-r--r--  1 root root 2550472 Apr 22 15:20 save_2016-04-22-15_20_01.zip
-rw-r--r--  1 root root 2550472 Apr 22 15:25 save_2016-04-22-15_25_01.zip
-rw-r--r--  1 root root 2550472 Apr 22 15:30 save_2016-04-22-15_30_01.zip
-rw-r--r--  1 root root 2550472 Apr 22 15:35 save_2016-04-22-15_35_01.zip
-rw-r--r--  1 root root 2550472 Apr 22 15:40 save_2016-04-22-15_40_01.zip
-rw-r--r--  1 root root 2550472 Apr 22 15:45 save_2016-04-22-15_45_01.zip
-rw-r--r--  1 root root 2550472 Apr 22 15:50 save_2016-04-22-15_50_01.zip
-rw-r--r--  1 root root 2550472 Apr 22 15:55 save_2016-04-22-15_55_01.zip #keep
-rw-r--r--  1 root root 2556836 Apr 22 16:00 save_2016-04-22-16_00_01.zip
-rw-r--r--  1 root root 2556836 Apr 22 16:05 save_2016-04-22-16_05_01.zip #keep
-rw-r--r--  1 root root 2586848 Apr 22 16:10 save_2016-04-22-16_10_01.zip
-rw-r--r--  1 root root 2586848 Apr 22 16:15 save_2016-04-22-16_15_01.zip
-rw-r--r--  1 root root 2586848 Apr 22 16:20 save_2016-04-22-16_20_01.zip #keep
-rw-r--r--  1 root root 2590213 Apr 22 16:25 save_2016-04-22-16_25_01.zip
-rw-r--r--  1 root root 2590213 Apr 22 16:30 save_2016-04-22-16_30_01.zip
-rw-r--r--  1 root root 2590213 Apr 22 16:35 save_2016-04-22-16_35_01.zip
-rw-r--r--  1 root root 2590213 Apr 22 16:40 save_2016-04-22-16_40_01.zip
-rw-r--r--  1 root root 2590213 Apr 22 16:45 save_2016-04-22-16_45_01.zip #keep

Команда выше печатает что-то вроде этого:

2590215 ./save_2016-04-25-14_20_01.zip
2590216 ./save_2016-04-25-14_00_01.zip
2590259 ./save_2016-05-17-13_10_01.zip
2590278 ./save_2016-05-17-13_35_01.zip
2590286 ./save_2016-05-17-13_50_01.zip
2590291 ./save_2016-05-17-14_25_01.zip
2590294 ./save_2016-05-17-13_55_01.zip

Есть идеи? У меня также нет прав для установки дополнительного программного обеспечения, доступны только команды, как для сервера Ubuntu 14.04.2 LTS.

2 ответа2

1

Поскольку у вас уже есть команда для хранения файлов, вы можете комбинировать ее с командой перемещения mv . Просто переместите их в другую папку (или дайте им другой префикс), удалите оставшиеся файлы и переместите их обратно.

Посмотрите на параметр -t mv . Вы можете использовать это, чтобы указать место назначения и затем передать несколько файлов на mv.

0

Это может быть не жизненно важно, но вы должны знать, что два индекса могут отличаться, даже если их размеры в байтах равны. Если вы хотите избавиться от этой опасности, вы можете проверить md5sum файлов. Это все еще не 100% гарантия удаления только дубликатов, но ваши шансы намного выше.

Это один из способов сделать это с помощью awk для отправки имен файлов в xargs для удаления (пример с моими файлами):

$ ls -l [a-d][1-3].txt
-rw-rw-r-- 1 lx lx 2 May 27 16:39 a1.txt
-rw-rw-r-- 1 lx lx 3 May 27 16:39 a2.txt
-rw-rw-r-- 1 lx lx 4 May 27 16:39 a3.txt
-rw-rw-r-- 1 lx lx 2 May 27 16:39 b1.txt
-rw-rw-r-- 1 lx lx 3 May 27 16:39 b2.txt
-rw-rw-r-- 1 lx lx 4 May 27 16:39 b3.txt
-rw-rw-r-- 1 lx lx 2 May 27 16:39 c1.txt
-rw-rw-r-- 1 lx lx 3 May 27 16:39 c2.txt
-rw-rw-r-- 1 lx lx 4 May 27 16:39 c3.txt
-rw-rw-r-- 1 lx lx 2 May 27 16:39 d1.txt
-rw-rw-r-- 1 lx lx 3 May 27 16:39 d2.txt
-rw-rw-r-- 1 lx lx 4 May 27 16:39 d3.txt
$ md5sum [a-d][1-3].txt | sort -k1 | awk '$1==prevsum {print $2}; {prevsum=$1}' | xargs  rm
$ ls -l [a-d][1-3].txt
-rw-rw-r-- 1 lx lx 2 May 27 16:39 a1.txt
-rw-rw-r-- 1 lx lx 3 May 27 16:39 a2.txt
-rw-rw-r-- 1 lx lx 4 May 27 16:39 a3.txt

Поскольку меня не интересуют размеры файлов, и я знаю схему именования файлов, мне даже не нужно использовать find.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .