ここで職場でtelnet経由でAIXを使用していますが、日付範囲内の特定のフォルダーでファイルを見つける方法を知りたいです。例:13-Aug-13〜31-Aug-13の間に作成されたフォルダX内のすべてのファイルを検索したい。
観察:
touch
トリック(-newerオプションを使用するために2つの空のファイルを作成する)は、サーバーでのユーザーロールがファイルの作成を許可しないと機能しません。以下を使用して、必要なものを見つけることができます。
特定の日付/時刻より古いファイルを検索する:
find ~/ -mtime $(echo $(date +%s) - $(date +%s -d"Dec 31, 2009 23:59:59") | bc -l | awk '{print $1 / 86400}' | bc -l)
または、2つの日付の間のファイルを検索できます。最初の日付がより最近、最後の日付がより古い。 2番目に進むことができ、mtimeを使用する必要はありません。必要なものは何でも使用できます。
find . -mtime $(date +%s -d"Aug 10, 2013 23:59:59") -mtime $(date +%s -d"Aug 1, 2013 23:59:59")
GNU find
を使用すると、バージョン4.3.3以降で次のことができます。
find -newerct "1 Aug 2013" ! -newerct "1 Sep 2013" -ls
GNU date -d
。]で受け入れられるすべての日付文字列を受け入れます。
-newerct
のc
をa
、B
、c
、またはm
のいずれかに変更できますatime/birth/ctime/mtime。
別の例-2017年11月6日の17:30から22:00に変更されたファイルのリスト:
find -newermt "2017-11-06 17:30:00" ! -newermt "2017-11-06 22:00:00" -ls
man find
の詳細:
-newerXY reference
Compares the timestamp of the current file with reference. The reference argument is normally the name of a file (and one of its timestamps is used
for the comparison) but it may also be a string describing an absolute time. X and Y are placeholders for other letters, and these letters select
which time belonging to how reference is used for the comparison.
a The access time of the file reference
B The birth time of the file reference
c The inode status change time of reference
m The modification time of the file reference
t reference is interpreted directly as a time
Some combinations are invalid; for example, it is invalid for X to be t. Some combinations are not implemented on all systems; for example B is not
supported on all systems. If an invalid or unsupported combination of XY is specified, a fatal error results. Time specifications are interpreted as
for the argument to the -d option of GNU date. If you try to use the birth time of a reference file, and the birth time cannot be determined, a fatal
error message results. If you specify a test which refers to the birth time of files being examined, this test will fail for any files where the
birth time is unknown.
これを試して:
find /var/tmp -mtime +2 -a -mtime -8 -ls
2日以上8日以上経過していないファイルを検索します。
ここでいくつかの良い解決策。短いだけでなく、私のものを共有したかった。
Find(GNU findutils)4.5.11を使用しています
$ find search/path/ -newermt 20130801 \! -newermt 20130831
stat
を使用して作成時間を取得します。 YYYY-MM-DD HH:MM:SS
形式の時間を辞書順に比較できます。
これはLinuxでの変更時間で機能し、作成時間はサポートされていません。 AIXでは、-c
オプションはサポートされていない可能性がありますが、何も機能しない場合はgrep
を使用して、とにかく情報を取得できるはずです。
#! /bin/bash
from='2013-08-01 00:00:00.0000000000' # 01-Aug-13
to='2013-08-31 23:59:59.9999999999' # 31-Aug-13
for file in * ; do
modified=$( stat -c%y "$file" )
if [[ $from < $modified && $modified < $to ]] ; then
echo "$file"
fi
done
この質問にもっと完全な方法で答えようとしましたが、find
コマンドの理解に役立つオプションを備えた完全なスクリプトを作成することになりました。
スクリプトoldfiles
はこの中にあります リポジトリ
新しいfindコマンドを「作成」するには、オプション_-n
_(dry-run)を指定して実行します。使用する必要がある正しいfind
コマンドが出力されます。
もちろん、_-n
_を省略すると、単に実行されるだけなので、find
コマンドを再入力する必要はありません。
$ oldfiles [-v...] ([-h|-V|-n] | {[(-a|-u) | (-m|-t) | -c] (-i | -d | -o| -y | -g) N (-\> | -\< | -\=) [-p "pat"]})
-h、--help:このヘルプを表示します。
-V、--version:バージョンを表示します。
-v、--verbose:詳細モードをオンにします(累積)。
-n、--dry-run:実行せず、「find」コマンドの作成方法を説明するだけです
-aまたは-u:アクセス(使用)時間
-mまたは-t:変更時刻(デフォルト)
-c:iノードのステータスの変更
-i N:分(デフォルト、Nは1分)
-d N:日
-o N:月
-y N:年
-g N:Nは日付(例:「2017-07-06 22:17:15」)
-p "pat":一致するオプションのパターン(例:cファイルを見つけるための-p "* .c")(デフォルト-p "*")
-\>:ファイルは指定された範囲よりも新しい、つまり、それ以降に変更された時間.
-\ <:ファイルは指定された範囲よりも古い、つまり、時間はその前からです。 (デフォルト)
-\ =:正確にN(分、日、月、年)古くなったファイル。
$ oldfiles -a -i 10 -p"*.c" -\> -nvvv Starting oldfiles script, by beco, version 20170706.202054... $ oldfiles -vvv -a -i 10 -p "*.c" -\> -n Looking for "*.c" files with (a)ccess time newer than 10 minute(s) find . -name "*.c" -type f -amin -10 -exec ls -ltu --time-style=long-iso {} + Dry-run
_$ oldfiles -m -o 1 -p"*.h" -\< -nvv Starting oldfiles script, by beco, version 20170706.202054... $ oldfiles -vv -m -o 1 -p "*.h" -\< -n find . -name "*.h" -type f -mtime +30 -exec ls -lt --time-style=long-iso {} + Dry-run
_
_$ oldfiles -mng "2016-12-01" -\= find . -name "*" -type f -newermt "2016-11-30 23:59:59" ! -newermt "2016-12-01 23:59:59" -exec ls -lt --time-style=long-iso {} +
_
もちろん、_-n
_を削除すると、プログラムはfind
コマンド自体を実行し、トラブルを軽減します。
これがみんなが最終的にこの_{a,c,t}{time,min}
_オプションを学ぶのに役立つことを願っています。
また、「ls」オプション_ls OPT
_は、選択した時間のタイプに合わせて変更されることにも気付くでしょう。
oldfiles
スクリプトのクローン/ダウンロードのリンク: