mv foo* ~/bar/
一致するファイルがない場合、同様のコマンドはstderrにこのメッセージを生成しますfoo*
。
mv: cannot stat `foo*': No such file or directory
しかし、私が作業しているスクリプトでは、この状況はまったく問題がないので、ログ内のメッセージを無視したいと思います。
mv
何も動かない時にも静かにしろと言える良い方法はないでしょうか?
答え1
これをお探しですか?
$ mv file dir/
mv: cannot stat ‘file’: No such file or directory
$ mv file dir/ 2>/dev/null
# <---- Silent ----->
答え2
実際、ミュートは良いアプローチではないと思いますmv
。興味がある他のものが報告される可能性があることに注意してください。たとえば、行方不明などがあります~/bar
。結果が返されない場合にのみ、glob式を沈黙させるだけです。実際にはまったく実装しないでください。
[ -n "$(shopt -s nullglob; echo foo*)" ] && mv foo* ~/bar/
それほど魅力的には見えませんbash
。
または
[ 'foo*' = "$(echo foo*)" ] || mv foo* ~/bar/
bash
コレクションに属さない限りnullglob
。しかし、3倍繰り返されるグローブパターンの代価を支払うことになります。
答え3
find . -maxdepth 1 -name 'foo*' -type f -print0 | xargs -0r mv -t ~/bar/
- GNUにはmv
素晴らしい「ターゲット優先」オプション(-t
)があり、xargs
入力がまったくない場合はコマンドの実行をスキップできます(-r
)。ファイル名にスペースやその他の「興味深い」コンテンツが含まれているときに混乱が発生しないようにするには、-print0
およびを使用します。-0
答え4
これは最善ではないかもしれませんが、find
次のコマンドを使用してフォルダが空であることを確認できます。
find "foo*" -type f -exec mv {} ~/bar/ \;