Как часть приложения, которое я разрабатываю, мне нужно удалить все файлы в каталоге A, которые уже находятся в каталоге B. Я подумал о rsync, но не могу остановить его от копирования файлов, отсутствующих из источника в место назначения.

Пример того, что я ищу

т.е.

    /dir1/apple
    /dir1/orange
    /dir1/banana 

А также

    /dir2/orange    

После команды у меня будет:

    /dir1/apple
    /dir1/banana 

А также

    /dir2/orange  

1 ответ1

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

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