чем cp -f отличается от cp --remove-destination?

чем cp -f отличается от cp --remove-destination?

на странице руководства cp опция -f/--force указана следующим образом: если существующий файл назначения не может быть открыт, удалите его и повторите попытку.

для параметра --remove-destination указано: удалить каждый существующий файл назначения перед попыткой его открытия (в отличие от --force)

Итак, первый сначала проверяет, можно ли его открыть, если нет, он удаляет в любом случае, тогда как последний просто пропускает этот шаг. Я объединил оба с опцией -i, и в обоих случаях он указывает, какие разрешения у файлов, если они защищены от записи.

Последний вариант, казалось бы, более эффективен, особенно при рекурсивном копировании/перезаписи больших каталогов, но зачем сохранять оба варианта? В чем преимущество проверки того, что в любом случае будет переопределено?

решение1

Между ними есть различие (выделено мной):

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

В первом случае, если файл может быть открыт, cpпопытается заменить только содержимое. cpне будет удалять файл без необходимости. Это сохранит разрешения и владельцев исходного файла, если вы не укажете, что они также должны быть скопированы.

Второй случай полезен, когда содержимое невозможно прочитать (например,висячие символические ссылки).

решение2

и: в случае, если файл назначения имеет несколько ссылок (жесткие ссылки), --remove-destination не уничтожит содержимое других ссылок. Вместо этого удаляется только ссылка назначения (теперь мы знаем, почему "remove" называется "unlink" в более глубоких системных функциях) и создается новый файл с новым inode.

Связанный контент