Как сделать команду 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
: игнорируются ошибки, связанные с несуществующими исходными файлами