コマンドラインでファイルの範囲をコピーする(ZSH / BASH)


13

サフィックスとして連続番号が付いているファイルのリストがあります。これらのファイルの範囲のみをコピーしたいと思います。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/.

これを行う方法はありますか?

回答:



9

bashの範囲を反復するには:

for x in {0..10}; do echo $x; done

あなたのケースで同じを適用する:

for x in {272..283}; do cp P1080$x.JPG ~/Images; done

これは機能しますが、プログラミング構文を呼び出さないので、@ glenn jackmanの答えの方が好きです。
Amjith 2012年

4

Zsh、extendedglobオプションを指定すると、グロビング(パターンマッチング)演算子が追加されます 。

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が存在しない場合、エラーが発生します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.