サフィックスとして連続番号が付いているファイルのリストがあります。これらのファイルの範囲のみをコピーしたいと思います。 cpコマンドの一部として範囲を指定するにはどうすればよいですか。
$ls
P1080272.JPG* P1080273.JPG* P1080274.JPG* P1080275.JPG* P1080276.JPG* P1080277.JPG*
P1080278.JPG* P1080279.JPG* P1080280.JPG* P1080281.JPG* P1080282.JPG* P1080283.JPG*
次のようなファイルをP1080275.JPGからP1080283.JPGにコピーしたいと思います。
$cp P10802[75-83].JPG ~/Images/.
これを行う方法はありますか?
あなたはとても親しかった。あなたの質問はほぼ正しい構文でした:
cp P10802{75..83}.JPG ~/Images
Bashの範囲を反復するには:
for x in {0..10}; do echo $x; done
あなたのケースで同じを適用する:
for x in {272..283}; do cp P1080$x.JPG ~/Images; done
Zsh、extendedglobオプションを指定すると、globbing(パターンマッチング)演算子が追加されます。
setopt extendedglob
echo P10802<75-83>.JPG
そのパターンに一致する現在のディレクトリのファイル名に一致します(P1080275.JPGは一致しますが、P108020000000075.JPGも一致することに注意してください)
一方、{x ... y}文字列展開演算子(zshとbashおよびksh93の最近のバージョンでサポートされています)は、現在のディレクトリにあるファイルに関係なく、xからyまでの文字列に展開されます。
cp P10802<75-83>.JPG ~there
一致するファイルをコピーするので、
cp P10802{75..83}.JPG ~there
ただし、たとえばP1080281.JPGが存在しない場合、エラーが発生します。
これはあなたのために働きますか:
for each in {75..83}; do cp P10802$each.JPG ~/Images/; done