Назад | Перейти на главную страницу

удалить файлы, которых нет в другой папке

У меня есть два каталога, которые называются thumb и thumb2. Они содержат одинаковые имена файлов, но различаются по размеру. К сожалению, в thumb2 есть файлы, которых нет в thumb2, и которые необходимо удалить.

$ ls ../thumb2 | wc -l
199030

$ ls ../thumb | wc -l
193455

Я ищу команду командной строки, которая удалит все файлы из thumb2, которых также нет.

Кто-нибудь знает, как это сделать?

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

cd ../thumb2
for f in *; do test -e ../thumb/$f || echo rm $f; done

У меня нет каталога с тысячами файлов, поэтому я не знаю, работает ли эта команда для такой большой выборки. Пожалуйста, попробуйте его после того, как вы создали резервные копии своих каталогов. Убедившись, что команда работает правильно, удалите echo команда.

Обновить

Вот модифицированная версия отличного решения Гленна:

diff thumb thumb2 | \
while read field1 field2 dir filename; do 
    [[ $dir = "thumb2:" ]] && echo rm "thumb2/$filename"
done

Вы также можете позвонить diff для проверки содержимого каталога:

diff thumb thumb2 |
while read line; do
  case "$line" in
    "Only in thumb2: "*) echo rm "thumb2/${line#*: }" ;;
  esac
done

удалять echo если вы довольны, он работает.