February 14, 2011

Копирование с перезаписью и без подтверждения

Предположим, вам надо скопировать одну папку в другую с заменой существующих файлов. Попробуем воспользоваться стандартной командой Linux/FreeBSD cp с параметрами -rf:
cp -rf /source_file /to/dest_file

Если файлов много, и предложенный выше вариант постоянно выдаёт запрос на подтверждение, проверьте что на самом деле скрывается под командой cp:
alias

[root@localhost ~]# alias
alias cp='cp -i'

Видим, что на самом деле под cp скрывается cp с флагом -i, означающим следующее:
-i: Спрашивает, нужно ли перезаписывать существующие файлы, в которые происходит копирование. (Запрос выдается на стандартный вывод ошибок, а ответ читается со стандартного ввода. Копирование осуществляется только в случае положительного ответа). (источник)

В данном случае имеется два варианта решения сложившейся ситуации:

1. Открепить alias (ссылку) на cp -i, тем самым сделав cp = cp:
unalias cp

2. Менее радикальный вариант -- использовать прямой путь к cp:
/bin/cp -rf /source_file /to/dest_file

Если по каким-либо причинам прямой путь к cp неизвестен, проверить можно следующим образом:
whereis cp


3. В комментариях есть ещё один вариант:
YES | cp -rf /source_file /to/dest_file

2 comments:

Anonymous said...

Еще один вариант
YES | cp -rf /source_file /to/dest_file

prosto said...

Большое спасибо, дописал в пост!