ディレクトリ「再帰」最終変更日

ディレクトリ「再帰」最終変更日

ディレクトリ内の最後に変更されたファイルのタイムスタンプを取得し、出力形式を指定する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-styleGNU 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

今年はファイルが作成されたため、年は表示されません。常に年を表示するには、年が常に表示されるようにコードを変更します。

関連情報