Команда оболочки Linux для сравнения двух каталогов и удаления дубликатов
Как часть приложения, которое я разрабатываю, мне нужно удалить все файлы в каталоге A, которые уже находятся в каталоге B. Я подумал о rsync, но не могу остановить его от копирования файлов, отсутствующих из источника в место назначения.
Пример того, что я ищу
т.е.
/dir1/apple
/dir1/orange
/dir1/banana
А также
/dir2/orange
После команды у меня будет:
/dir1/apple
/dir1/banana
А также
/dir2/orange
1 ответ
Зациклите каждый файл в каталоге 2 и попробуйте удалить эквивалент с тем же именем файла (basename
) в каталоге 1.
for f in dir2/*; do echo rm -f -- dir1/"$(basename "$f")"; done
Обратите внимание, что rm -f
не ошибка на файлах, которые не найдены. Удалить echo
когда вы уверены, что это удалит правильные вещи.
Если вы только хотите позвонить rm
на существующих файлах, проверьте, если они находятся в dir1
с [[ -f … ]]
,
for f in dir2/*; do del=dir1/"$(basename "$f")"; [[ -f "$del" ]] && rm -- "$del"; done