mv *.{jpg,png} フォルダ/両方のファイル形式が存在する場合のみ動作

mv *.{jpg,png} フォルダ/両方のファイル形式が存在する場合のみ動作

*.{jpg,png}このタイプのすべてのファイルを選択しないでください。

mvこのように連続ターゲットを受けることが可能であることを知っていますがmv *.png *.jpg folder/、なぜ{}ダメですか?

答え1

あなたは探しているかもしれません

shopt -s nullglob

答え2

中括弧拡張はファイル名のワイルドカードの一部ではなく、独自の機能であり、ワイルドカードが発生する前に機能します。

まず、中括弧拡張がsumに*.{jpg,png}なります。次に、ファイル名グロービングを介して一致するファイル名に展開します。デフォルトでは、どのファイルとも一致しないglobパターンはそのまま残ります。したがって、これら2つは同じです。*.jpg*.png

mv *.png *.jpg folder/
mv *.{png,jpg} folder/

ディレクトリ内の唯一のファイルがある場合、両方のfoo.pngコマンドbar.pngは次に展開されます。

mv foo.png bar.png *.jpg folder/

mv存在しないファイルについて文句を言うかもしれません*.jpg

Bashを使用すると仮定すると、を使用して拡張globを有効にし、shopt -s extglob拡張globを使用する必要があります*.(png|jpg)。必要に応じて動作しますが、実際には2つではなく1つの汚れを作成します。または、shopt -s nullglob一致しないグローブをそのままにする代わりに消えるように設定することもできます。

2つのタイプのうち1つ以上のファイルが存在する場合、結果は同じです。まったく存在しない場合は、無効になっている*.(png|jpg)かのように残ります。nullglobオンの場合、nullglobこれらのモードは完全に消え、コマンドはすぐにmv folder/。エラーメッセージは混乱する可能性があります。

関連情報