回答:
これは、「開いた」という意味に正確に依存しますが、一般的にはそうです。通常記録されるタイムスタンプは3つあります。
mtime
—ファイルの内容が変更されたときに更新されます。ほとんどの場合、これが「デフォルト」のファイル時間です。ctime
—ファイルまたはそのメタデータ(所有者、権限)が変更されたときに更新されますatime
—ファイルの読み取り時に更新そのため、一般的に、見たいatime
のはファイルです。stat
またはで取得できますls
。ls -lu
これを行うために使用できますが、私は使用することを好みますがls -l --time=atime
(ほとんどすべての最新のLinuxディストリビューションでサポートされるはずです)、頻繁に使用することはないため、使用するときは覚えやすくなります。そして、する並べ替えの時間によって、追加-t
のlsにフラグを。それであなたは行きます。
ただし、大きな警告があります。ファイルが読み込まれるたびにatimeを更新すると、通常不要なIOが大量に発生し、すべてが遅くなります。そのため、ほとんどのLinuxディストリビューションでは、デフォルトでnoatime
ファイルシステムマウントオプションがデフォルトで使用されます。これは、基本的にakillを強制終了するかrelatime
、制限を超えると(通常は1日に1回)更新するか、前回の読み取り以降にファイルが実際に変更された場合にのみ更新します。mount
コマンドを実行すると、これらのオプションがアクティブかどうかを確認できます。
また、アクセス時間はファイル名ではなくiノードごとであるため、ハードリンクがある場合、ハードリンクから読み取ると、同じファイルを参照するすべての名前が更新されます。
また、cは「作成」ではないことに注意してください。Unix / Linuxファイルシステムでは作成が追跡されません。奇妙に思えますが、ファイルシステムがオリジナルかどうかを知る方法がないため、実際には理にかなっています。40年前にファイルが作成され、ここでコピーされた可能性があります 実際、多くのファイルエディターは、オリジナルをコピーして作成します。その情報が必要な場合は、などのバージョン管理システムを使用するのが最善git
です。
mount
マンページを探してください。
ls
デフォルトでは、時間を合理的な精度に短縮します。時間を完全な精度で表示するには、を使用できます--full-time
。
リスティングが人間が消費ls
するものである場合、日付ソートフラグの1つと共に使用し-tu
ます(アクセス(読み取り)時間、-t
変更(書き込み)時間、または-tc
iノード変更時間のみ)。詳細については、mattdmの回答を参照してください(特に、に関する注意事項-a
と定義-c
)。
これがプログラムの消費用である場合、の出力の解析にls
問題があります。シェルがzshの場合、ls
とにかく必要はありません。zshには*(Oa)
、アクセス時間()、iノード変更(*(Oc)
)、または変更(*(Om)
)時間を増やして一致をソートするグロビング修飾子があります。小文字はo
年齢が上がるにつれてソートされます。
act_on_files_by_date *(Om)
それ以外の場合、ファイル名に改行または印刷不可能な文字(現在のロケール)が含まれていないことがわかっている場合は、次のようなことができます
ls -t | while read -r name; do act_on_one_file "$name"; done
ls -t | xargs -I {} act_on_one_file {}
一度に多くのファイルでコマンドを呼び出す場合は、さらにセットアップが必要です。act_on_files_by_date $(ls -t)
ワイルドカード文字または空白を含むファイル名は、コマンド置換の結果として展開されるため、このように機能しないことに注意してください。次のコードは、ファイル名に改行または印刷できない文字が含まれていない限り機能します。
IFS='
'
set -f
act_on_files_by_date $(ls -t)
set +f
unset IFS
任意のファイル名に対処したい場合、標準のシェル(zsh、perl、python)よりも強力なツールに頼らずに非常に苦労します。