Как использовать «cp» для перезаписи файлов?

10

Используя сценарий оболочки или Терминал, как мне перезаписать файлы, которые могут присутствовать или не присутствовать. Я посмотрел на страницу man для cp, там было указано использование аргумента -f для принудительной перезаписи. Но это ничего не делает.

$ cp -f /path/to/source/file.txt /path/to/target

Или есть другой вариант перезаписать файлы, используя стандартные встроенные инструменты командной строки в OS X?

rogerFernand
источник
3
Меня устраивает. Что он делает вместо перезаписи при попытке?
Гордон Дэвиссон
2
Если у вас нет разрешения перезаписать целевой файл, это не удастся. Если вы действительно хотите перезаписать целевой файл, вы можете использовать его sudoв начале команды. Но используйте с осторожностью!
Даниил
@ Гордон Дэвиссон: Что это делает? ничего. Это только скопирует файлы в целевой каталог, если я mvих или rmих.
rogerFernand
@ Даниэль Лоусон: Без использования sudoя могу использовать mvили rmдля перемещения или удаления файлов перед использованием cp. Использование sudo cpне имеет значения.
rogerFernand
Любопытнее и любопытнее.
Даниэль

Ответы:

14

Я озадачен тем, почему cp ведет себя так, если псевдоним не задействован. Тем не менее, есть утилита быстрой грязной и опасной, предусмотренные для этой конкретной ситуации: yes. Вы можете использовать его для передачи непрерывного потока утверждений в любую команду, которая выдает запросы на подтверждение (вы можете использовать ее для отправки любого текста, но по умолчанию используется значение "y").

yes | cp foo bar выполнит команду cp и пропустит все запросы на подтверждение.

octern
источник
8

Это может быть вызвано псевдонимом команды.

Чтобы позвонить cpнапрямую, вы можете использовать/bin/cp src dest

Аджи
источник
1
Не уверен, почему это было понижено. У меня сложилось впечатление, что явное указание -f переопределит -i в псевдониме, но я проверил, и это не так. Постер должен выяснить, есть ли у них псевдоним cp (тип alias cp). Они могут изменить псевдоним в своем профиле или использовать / bin / cp, как предложено.
октября
Я использую по умолчанию, cpкак Apple, при условии.
rogerFernand
@octern:roger$ alias cp -bash: alias: cp: not found
rogerFernand
Мне пришлось использовать / bin / cp, я не знаю почему.
Beingalex
1
Возможно, я слишком опоздал, но для людей, пришедших из поисковой системы, я смог узнать, есть ли у команды псевдоним type cp. И это действительно так.
визг
2
rm foo/bar/destination && cp source foo/bar/destination

Сначала вы удаляете ( rm) место назначения, затем, если все прошло успешно ( &&), вы копируете. При удалении папки, пожалуйста, не забудьте добавить -rв rm( rm -r).

vtoanb
источник
1

У меня также был псевдоним, путающийся с -f, вызывающий cp напрямую из / bin, и все в порядке, иметь псевдоним, который предотвращает случайные перезаписи / удаления по умолчанию, довольно хорошо, поэтому лучше не удалять его.

. # псевдоним

псевдоним cp = 'cp -i'

как уже говорилось, флаг -i заменяет -f, что не позволяет команде ниже работать так, как задумано.

. # / bin / cp -fauv src dst

Никлас Йоранссон
источник