6月、7月、8月に作成されたファイルを検索しようとしています。私はこの方法を使いました
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
しかし、それは機能していません。
次のように複数のパターンで照合できます。
awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)
これは、6月、7月、または8月のすべての一致を返します。print
のデフォルトアクションであるため、awk
ステートメントは必要ありません。
原則として、 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
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"