
次の日次ログを含むフォルダがあります。
system-2013-01-01.log
system-2013-01-02.log
system-2013-01-03.log
system-2013-01-04.log
system-2013-01-05.log
system-2013-01-06.log
system-2013-01-07.log
system-2013-01-08.log
...
system-2013-01-31.log
2013-01-01から2013-01-15までのログを選択してコピーする方法は?
答え1
bash
サポートする支柱の拡張を使用すると、コマンドで拡張する複数の値または範囲を指定できます。例えば、
$ echo {1..5}
1 2 3 4 5
$ echo foo_{01..05}
foo_01 foo_02 foo_03 foo_04 foo_05
したがって、コピーするファイルの範囲を簡単に指定できます。
cp system-2013-01-{01..31}.log /some/destination/dir
これは次のbash
ように拡張されます。
cp system-2013-01-01.log system-2013-01-02.log system-2013-01-03.log ...
答え2
毎日ファイルがある場合は、次のシーケンス式を使用できます。大きな括弧:
cp -p system-2013-01-{01..15}.log /elsewhere
毎日のファイルがない場合は、文字を使用できます模様。
cp -p system-2013-01-0[1-9].log system-2013-01-1[0-5].log /elsewhere
2つの範囲のいずれかに一致するファイルがない場合、パターンは拡張されていません。設定空のボールこれを防ぐためのオプション(bashのみ)です(shopt nullglob
)。
Zshは数値範囲を介してこれを容易にします。<start-stop>
グローバルモード。
cp -p system-2013-01-<1-15>.log /elsewhere
zsh を必要とせず、より複雑なケースに合わせて拡張する別の方法は、find
ファイルのリストを生成することです。矛盾について心配する必要はありません。cp
すべての一致に対して行われます。
find . \( -name 'system-2013-01-0[1-9].log' -o -name 'system-2013-01-1[0-5].log' \) -exec cp -p {} /elsewhere \;
サブディレクトリへの再帰を防ぐには、-type d -prune -o
後に追加してください。find .