Я протестировал это решение на небольшом образце, но обязательно сделайте резервную копию своих каталогов, прежде чем пытаться:
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
, если вы уверены, что он работает.