次のファイルがリストされているディレクトリがあります。
abc201303130110.txt
abc201303140511.txt
abc201303150112.txt
ご覧のとおり、ファイル名には日付タイムスタンプが含まれています。201303140000
ファイル名に対応する値以上のすべてのファイルを返したいです。
grepを使用してファイル名の日付/時刻部分を取得できますが、X > 201303140000
。
答え1
awk
GNUなら、awk
単に以下を使うことができます:
find . -type f | awk '{ match($0, /2013[0-9]+/,arr)} arr[0] >= 201303140000 '
答え2
Perlが救出に来る! Perlの-n
スイッチはやや同様に動作し、sed -n
Perlはマッチングと算術の面でより強力です。
dennis@lightning:/tmp/foo$ ls -1
abc201303130110.txt
abc201303140511.txt
abc201303150112.txt
dennis@lightning:/tmp/foo$ ls | perl -ne '$d=$_; $d =~ s/.*?(\d+).*/\1/s; print if $d >= 201303140000'
abc201303140511.txt
abc201303150112.txt
答え3
そしてzsh
:
print -rl abc<201303140000->.txt