「mv」を自動的に失敗させる方法はありますか?

「mv」を自動的に失敗させる方法はありますか?

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/ \;

関連情報