Как сделать команду cp тихой, если в Bash не найден файл?

Я искал map cp, но не могу найти тихую опцию, так что cp не сообщает "Нет такого файла или каталога".

Как я могу заставить cp не печатать эту ошибку, если она пытается, но не может скопировать файл?

Ответы

Ответ 1

Ну, все предложили, чтобы перенаправление на /dev/null помешало вам увидеть ошибку, но вот другой способ. Проверьте, существует ли файл, и если это так, выполните команду cp.

[[ -e f.txt ]] && cp f.txt ff.txt

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

Ответ 2

Если вы хотите подавить только сообщения об ошибках:

cp original.txt copy.txt 2>/dev/null

Если вы хотите отключить бот сообщения об ошибках и код выхода используйте:

cp original.txt copy.txt 2>/dev/null || :

Ответ 3

Общее решение - перенаправить stderr на битбакет:

 cp old_file new_file 2>>/dev/null

Это скроет любые ошибки в вашем скрипте, а это означает, что он будет терпеть неудачу при различных обстоятельствах. Я использую >> вместо > в перенаправлении в случае необходимости использовать файл журнала.

Ответ 4

Как и для любой ошибки, напечатанной в STDERR, просто перенаправьте ее на /dev/null:

cp a b 2> /dev/null

Ответ 5

Перенаправление:

cp ... 2>/dev/null

Ответ 6

rsync -avzh --ignore-missing-args /path/to/source /path/to/destination

ignore-missing-args: игнорируются ошибки, связанные с несуществующими исходными файлами