web-dev-qa-db-ja.com

シェルワイルドカードを使用して、2桁の数字(例:foo_1.jpgからfoo_54.jpg)にまたがるファイル名を選択できますか?

画像ファイルfoo_0.jpgからfoo_99.jpgのディレクトリがあります。ファイルfoo_0.jpgからfoo_54.jpgをコピーしたいと思います。

これはbashワイルドカードを使用するだけで可能ですか?

cp foo_[0-54].jpgのようなものを考えていますが、これが0-54を選択することは知っています(右?)

また、ワイルドカードだけでは不可能(または効率的)でない場合、これを行うためのより良い方法は何でしょうか?

ありがとうございました。

28
DQdlM

これらのファイルを別のディレクトリにコピーしたいとします。

cp -t target_directory foo_{0..54}.jpg
48
glenn jackman

私は glenn jackman 回答が好きですが、本当にグロブを使用したい場合は、次の方法でも機能する可能性があります。

_$ shopt -s extglob
$ cp foo_+([0-9]).jpg $targetDir
_

拡張グロブでは、+()は、括弧内の式の1つ以上のインスタンスに一致します。

これで、_foo__、任意の番号、_.jpg_という名前のすべてのファイルがコピーされます。これには、_foo_55.jpg_、_foo_139.jpg_、および_foo_1223218213123981237987.jpg_が含まれます。

考え直してみると、グレンジャックマンの方が良い答えです。しかし、それは私に 拡張グロブ について話す機会を与えてくれました。

9
David W.

ls foo_ [0-9] .jpg foo_ [1-4] [0-9] .jpg foo_5 [0-4] .jpg

Lsで試してみて、それが良さそうな場合はコピーを実行してください。

4
grok12
for i in `seq 0 54`; do cp foo_$i.jpg <target>; done
3
pajton