ディレクトリ内の最後に変更されたファイルのタイムスタンプを取得し、出力形式を指定するLinux bashのコマンドまたは関数を知りたいです。
/path/mydirがあり、このディレクトリに多くのファイルがあるとします。パスが指定された最後に変更されたファイルのタイムスタンプを出力したいと思います。
プロセスがforeachファイルを再帰的に実行し、すべてのファイルを確認し、更新された変数が見つかるたびに最新の時刻に変数を更新できるようです。
編集:混乱させて申し訳ありません。しかし、エポックタイムスタンプを使いたかったです。 :)
答え1
1つのオプション:GNU findを使用してすべてのファイルを繰り返し繰り返し、タイムスタンプとファイルパスを印刷し、日付でソートします。
find /path/mydir -type f -printf "%T+\t%p\n" | sort | tail -1
エポックタイムスタンプ専用です。
find /path/mydir -type f -printf "%T@\n" | sort | tail -1
答え2
一方オペレーティングシステムそして強く打つ問題のタグと「linux bash」の仕様は次のとおりです。特定のディレクトリ構造で最後に変更されたファイルのファイル名とタイムスタンプを出力するbash関連の関数は次のとおりです。
function lastmodified () (
shopt -s globstar
latest=
t=0
for f in "$1"/**
do
x=$(stat -c "%Y" "$f")
if [ $x -gt $t ]
then
latest="$f"
t="$x"
fi
done
printf "%s\n" "$latest"
printf "%s\n" "$(date -d @${t})"
)
次のように使用してくださいlastmodified /path/mydir
。
分離するためにサブシェルで実行されます。globstar シェルオプションそして様々な変数の割り当て。興味のあるデータをキャプチャするには、printfステートメントを変更または削除してください。
どのように機能するかは、bashに$1
指定されたパラメータの下のすべてのファイル名パスを拡張するように要求し、次を使用して「最後の変更時間(エポック以降の秒)」を確認することです。統計資料注文する。最新のファイル名はで終わり、$latest
タイムスタンプはで終わりますt
。
答え3
確実にする扱いにくいインストール済み(すべての主要ディストリビューション用パッケージ)
zsh -c 'ls -log **/*(.om[1])' | awk '{print $4, $5, $6}'
**/*
はワイルドカードパターンサブディレクトリ内のすべてのファイルを繰り返し一致さ
(.om[1])
せます。グローバル予選通常のファイル(.
)に一致を制限するには、変更時間に基づいてソートし()、最新のom
ファイルのみを保持します([1]
)。 Glob修飾子はzshのユニークな機能であり、ほとんどの機能(特にソート)は他のシェルで再現するのが難しいです。
.
通常、必要な一般ファイルのみを含めました。ただし、たとえば、ファイルが最後に削除された時刻をタイムスタンプに反映するには、修飾子を削除することをお勧めします。
--time-style
GNU lsには時間形式を制御するオプション()があります。時間形式によっては、時間フィールドを抽出するために後処理を調整する必要がある場合があります。
stat
またはLinuxコマンドを使用するzshstat
組み込み希望の形式でタイムスタンプを印刷します。
zsh -c 'zmodload zsh/stat; stat +mtime -- **/*(.om[1])'
答え4
find . -type f -exec ls -ltr {} \; | awk '{print $6"-"$7"-"$8" "$9}' | sort -k3 | sort -nr | head -1
出力形式はMonth-date-hour-minute filename
Dec-30-03:10 ./1
今年はファイルが作成されたため、年は表示されません。常に年を表示するには、年が常に表示されるようにコードを変更します。