6月、7月、8月に生成されたファイルを検索しようとしています。私はこの方法を使用しました
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
しかし、うまくいきません。
答え1
以下のように複数のパターンを一致させることができます。
awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)
これで Jun、July、August がすべて返されます。print
これがawk
基本的な操作なので、このステートメントは必要ありません。
答え2
一般的に言えば、これは非常に悪い考えです。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
答え3
ls
人間が読める形式でファイルに関する情報を表示するコマンド。スクリプトでは使用しないでください。
ディレクトリツリーで特定の基準に一致するファイルを検索するコマンドは次のとおりです。find
。 GNU検索(組み込みLinuxやCygwinなど)やFreeBSD検索(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"