Linux
如果文件在副本中不存在,則不顯示錯誤,而不發送到 dev null
如果我嘗試 cp 一個不存在的文件,我想避免我的腳本發布錯誤。但是,我希望列印出任何其他錯誤的錯誤消息,例如權限不足。這意味著我無法將消息發送到 dev/null。在腳本中還有哪些其他解決方案可以做到這一點?
一種選擇是在複製之前檢查文件是否存在的 if 語句,但這種方法看起來相當混亂。我想我可以通過在文件名中添加 * 來獲得我想要的東西,儘管這似乎是一種奇怪的做事方式。是否有一些命令行參數或其他方式來獲得我想要的?
你可能會喜歡:
{ command <doesntexist cp doesntexist 2>&3 ; } 3>&2 2>/dev/null
在子shell中它可能更短……
( <file cp file ... 2>&3 ) 3>&2 2>/dev/null
但這似乎還有很長的路要走……
[ -r file ] && cp file ...
所有這些都只測試可讀文件 - 它們不適用於目錄……
但…
[ -e file ] && cp file ...
…可以…
檢查是否存在將減少問題,但在最一般的情況下,這是一個競爭條件。在檢查和複製嘗試之間仍然可以刪除文件。
也許只是擷取所有錯誤並刪除任何“文件不存在”。
普通副本:
$ cp noexist bar /tmp cp: cannot stat `noexist': No such file or directory cp: cannot open `bar' for reading: Permission denied
修改的
$ cp noexist bar /tmp 2>&1 | grep -v "No such file or directory" >&2 cp: cannot open `bar' for reading: Permission denied