3

日付を含む一連のファイルがあります。

それらを呼び出すことができます:

 a20120528_120001.log
 b20120528_120003.log
 (name)(year)(month)(day)_(hour)(minute)(second).log

次のようにして、これら 2 つのファイルを同時に移動するのは簡単です。

 mv *20120528_12* file/

しかし今、同じ日に数時間分のファイルを移動したい状況があります。

 a20120528_120001.log
 b20120528_120003.log
 a20120528_130001.log
 b20120528_130003.log
 a20120528_140001.log
 b20120528_140003.log

今、それらすべてを転送したい場合は、その日だけ行うことができます:

 mv *20120528* file/

しかし、12 時間と 13 時間のみを移動し、14 時間を除外したい場合はどうすればよいでしょうか。

これは、日付を入力できるように十分に一般的である必要があることに注意してください。これは、1 日あたり 24 個のログがあり、毎日からいくつか (3 ~ 8 個) が除外される複数の日に使用されるように拡張されるためです。

どうすればいいですか?

4

2 に答える 2

1

範囲を使用できます:

mv *20120528_1[23]* file/

3 ~ 8 のすべてを除外するには、もう少し複雑な方法を使用します。

mv *20120528_{0[0-29],[12]*}*
  • [0-29]0-2と の範囲に分解されます9
  • {A,B}Aまたはに展開されBます。
于 2012-07-29T23:13:39.750 に答える
1

これは良い質問です。なぜなら、Bash ではファイル名の展開*で、、、?およびのみが使用されるから[です。したがって、12 時間と 13 時間は次の方法でのみ処理できます。

[ab]20??????_1[23]????.log

これは 2099 年までしか表示されないことに注意してください。それが気になる場合は適宜調整してください。

ただし、値の一般的な範囲が必要な場合は、複数のコマンドが必要になります。00 から 23 の時間があり、03 から 08 を除外したい場合は、次のものが必要になると思います。

[ab]20??????_0[0129]????.log
[ab]20??????_1?????.log
[ab]20??????_2[0123]????.log

もちろん、ファイル名のグロビングよりも複雑なものを使用して、適切なパターンを生成するスクリプトを作成することもできます。ただし、それほど複雑にする必要があるかどうかはわかりません。

于 2012-07-29T23:14:19.393 に答える