web-dev-qa-db-ja.com

番号付きのファイル名のパターンを検索する

フォルダー内に多数のファイルがあり、それぞれファイル名として日付が含まれています。
例えば

20130101
20130102
20130103
.
.
.
20130131

他の月20130201から20130230についても同様に、パターンは[年] [月] [日]です。 JANからAPRILまでの最初の15ファイルのtarファイルを作成する必要があります(つまり、2013[01-04][01-15])、grepでは2桁の数値範囲が許可されていないため。このパターンをどのように検索すればよいですか?

3
Aditya Cherla

zshの場合:

tar zcf ~/file.tar.gz 20130<1-4><1-15>

bashを使用する必要がある場合:

shopt -s extglob
tar zcf ~/file.tar.gz 20130[1-4]@(0?|1[0-5])
5

検索を使用してファイル名を検索します。

find . -maxdepth 1 -name "20130[1-4]0?" -o -name "20130[1-4]1[0-5]" 

それが正しいセットであるかどうかを確認し、出力をcpioの入力として使用します。

find . -maxdepth 1 -name "20130[1-4]0?" -o -name "20130[1-4]1[0-5]" | cpio --create --format=ustar -O file.tar

@richardは、これがサブディレクトリをトラバースする可能性があることを指摘しました(サブディレクトリがパターンと一致する場合)(そしてシェルがパターンを拡張し、修正しました)。

コマンドラインで展開すると、コマンドラインのriskが長くなりすぎます。これは、毎日数秒ごとにファイルがある場合に発生する可能性があります(20130101-0000520130101-00007。ファイル名をcpioにパイピングしても問題ありません。

2
Zelda

Grepビットです。

grep -zE "^20130[1-4](0[1-9]|1[0-5])$"
2
ctrl-alt-delor