回答:
次のように複数のパターンで照合できます。
awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)
これにより、6月、7月、8月のすべての一致が返されます。これはデフォルトのアクションでprint
あるため、ステートメントは不要awk
です。
awk '/Jun|Jul|Aug/'
場合awk '/Ju[nl]|Aug/'
原則として、lsの出力を解析することは非常に悪い考えです。あなたが望むことをするより良い方法は
stat -c "%n %y" * | grep 2013-0[678]
または、最後のフィールドのみをチェックして、ファイル名自体が日付であるというまれなケースから保護します。
stat -c "%n %y" *| awk '$NF ~ /2013-0[678]/'
からman stat
:
-c --format=FORMAT
use the specified FORMAT instead of the default; output a new‐
line after each use of FORMAT
%y time of last modification, human-readable
%n file name
| awk '$NF ~ /2013-0[678]/'
に変更して、日付が一致しない場合でも、ファイル名が正規表現と一致する(そうではない?)であっても、最後の出力フィールドのみをチェックします。
ls
人間が読める形式でファイルに関する情報を表示するコマンドです。スクリプトでは使用しないでください。
特定の基準に一致するディレクトリツリー内のファイルを検索するコマンドは、find
です。GNU find(つまり、非組み込みのLinuxまたはCygwin)またはFreeBSD find(つまり、FreeBSDまたはOSX)がある場合-newermt
、特定の日付以降に最後に変更されたファイルを照合するために使用できます。
find . -newermt '1 June' ! -newermt '1 September' -print
スクリプトの実行時の暦年ではなく、特定の年のファイルを照合する場合は、年を追加します。
検索実装にがない場合は-newermt
、で行う必要があります。-newer
これは、find
見つかったファイルの日付を固定ファイルと比較します。touch
境界として使用する日付の一時ファイルを作成するために使用します。
dir=$(mktemp -d)
touch -d 201306010000 "$dir/from"
touch -d 201309010000 "$dir/to"
find . -newer "$dir/from" ! -newer "$dir/to" -print
rm -r "$dir"
[...]
構成は単一の文字に一致します。これは、大括弧内の任意の文字にすることができます。そのため、式はJJA
orJug
(J
from[Jun]
、u
from[Jul]
、g
from[Aug]
)に一致しますが、一致させたいと思っていた月の省略形には一致しません。