Как найти файлы, которые являются дубликатами файлов в определенной папке?

285
cezieu

Мне нужно удалить дубликаты на моем компьютере, так как у меня есть около 5 копий каждой фотографии в разных папках. Я хочу удалить фотографии, которые также появляются в определенной папке, ведь я отсортировал их несколько. Я хочу, чтобы он сохранял файлы в папке, а также сохранял дубликаты, которые также не отображаются в этой папке. Например: я хочу сохранить файлы на рабочем столе.

  • C: / Рабочий стол / file1, файл3
  • C: / Рабочий стол / 2016 / файл2
  • C: / Резервное копирование / файл1 (2), file4
  • C: / Backup2 / файл1 (3), файл2 (2), file4 (2)

Результат должен быть

  • C: / Рабочий стол / file1, файл3
  • C: / Рабочий стол / 2016 / файл2
  • C: / Резервное копирование / file4
  • C: / Backup2 / file4 (2)
0
Что ты уже пробовал? slhck 6 лет назад 0
Поиск дубликатов CCleaner cezieu 6 лет назад 0

1 ответ на вопрос

0
simlev

Предполагая dir1, что путь, который вы хотите найти и dir2быть определенная папка :

find dir1 -not -path "dir2/*" | grep -F -f <(ls -1 dir2) | parallel rm 

или, если только у вас есть xargsи нет parallel:

find dir1 -not -path "dir2/*" | grep -F -f <(ls -1 dir2) | xargs rm 

Пример:

Допустим, вы хотите посмотреть на C:диск и определенная папка является C:\Desktop, то на Cygwin :

find /cygdrive/c -not -path "/cygdrive/c/Desktop/*" | grep -F -f <(ls -1 /cygdrive/c/Desktop) | parallel rm 

на Git-для-Windows :

find /c -not -path "/c/Desktop/*" | grep -F -f <(ls -1 /c/Desktop) | parallel rm 

на WSL :

find /mnt/c -not -path "/mnt/c/Desktop/*" | grep -F -f <(ls -1 /mnt/c/Desktop) | parallel rm 
Не работает, как ожидалось ... (я, вероятно, здесь виноват). Я использовал cygwin и $ find / cygdrive / c / dedup -not -path "/ cygdrive / c / dedup / test / *" -delete | grep -F -f <(ls -1 / cygdrive / c / dedup / test) и удалил все файлы, кроме файлов в / test («определенная папка») cezieu 6 лет назад 1
Нет, я допустил ошибку при размещении опции `-delete` перед` grep`: таким образом, все найденные файлы будут удалены * до * применения фильтра! Это должен был быть `find dir1 -not -path" dir2 / * "| grep -F -f <(ls -1 dir2) | параллельный рм {} `. simlev 6 лет назад 0
о, сейчас проверяю cezieu 6 лет назад 0
У меня были некоторые проблемы с установкой параллельной системы и всего остального, что требовалось, но теперь это работает; 3! Большое спасибо ! cezieu 6 лет назад 0
@cezieu Извините за публикацию опасного ответа, хорошо, что вы его проверили. `parallel` делает то же самое, что и` xargs`, который обычно доступен по умолчанию, поэтому вам не следовало беспокоиться. simlev 6 лет назад 0