最も古いファイルの名前だけを取得するには、
ls -lt | awk '/^-/{file=$NF}END{print file}'
ただし、名前にスペースが含まれるファイルなどがある場合、これは堅牢ではありません。一般に、からの出力を解析しないようls
にする必要があります。
を使用stat
すると、1970 年 1 月 1 日からの秒数で表される、機械可読形式でファイルの作成日を取得できます。を使用date +%s
すると、同じ形式で現在の時刻を取得できます。引き算して 60 で割ります。
最後に、代替ソリューションについては、のオプションを見てくださいfind
。特に、printf
フォーマット文字列を使用すると、ファイルの経過時間を抽出できます。以下は、最も古いファイルの経過時間 (秒) と inode 番号を直接取得します。
find . -maxdepth 1 -type f -printf '%T@ %i\n' |
sort -n | head -n 1
inode 番号を使用すると、変なファイル名の問題を回避できます。単一の inode があれば、それをファイル名に変換するのは簡単です。
find . -maxdepth 1 -inum "$number"
2 つを結び付けると、次のようなものが必要になる場合があります。
# set -- Replace $@ with output from command
set -- $(find . -maxdepth 1 -type f -printf '%T@ %i\n' |
sort -n | head -n 1)
# now $1 is the timestamp and $2 is the inode
oldest_filename=$(find . -maxdepth 1 -inum "$2")
age_in_minutes=$(date +%s | awk -v d="$1" '{ print ($1 - d) / 60 }')