特定のディレクトリのファイルリストから最新のファイルを開く方法は?同じファイル名は最新の日付順にソートされます。
現在、次のコマンドを使用しています。
ls -lrt filename*
tail -f filename
答え1
シェルがBourneに似たシェルで、組み込み関数があるファイル[
が-nt
別のファイルより最新であるかどうかをテストするテストを実装する場合は、次のことができます。
newest=
for file in ./* ./.*; do
if [ -f "$file" ]; then
if [ -z "$newest" ] || [ "$file" -nt "$newest" ]; then
newest=$file
fi
fi
done
if [ -f "$newest" ]; then
printf 'The latest file is "%s"\n' "$newest"
else
echo 'Could not find files here' >&2
exit 1
fi
これは、現在のディレクトリ(隠しファイルを含む)にあるすべての一般ファイル(および一般ファイルへのシンボリックリンク)を繰り返して、どのファイルが最新であるかを示します。printf
このステートメントを実行したい実際のコマンドで置き換えることができます"$newest"
。
シェル関数として、ファイルリストも引数として受け入れます。
newest () (
newest=
for file do
if [ -f "$file" ]; then
if [ -z "$newest" ] || [ "$file" -nt "$newest" ]; then
newest=$file
fi
fi
done
if [ -f "$newest" ]; then
printf '%s\n' "$newest"
else
echo 'No files found' >&2
return 1
fi
)
それから
tail -f "$(newest ./filename*)"
答え2
インストールされている場合は、zsh
そこで次のことができます。
尾 -f ファイル名Ctrl+xm
Ctrl+xm(最後のファイルに基づいて)最新のファイルに拡張する完成機です。改訂する時間)。
スクリプトから:
#! /usr/bin/env zsh
tail -f filename*(om[1])
om
編集時間(最も最近の順番)に基づいて並べ替え、最初の[1]
項目を選択します。
答え3
GNU を使用して、find
すべてのファイルの最後の変更時刻をsort
逆順に印刷し、最後に変更されたファイル ( head -n 1
--top エントリ) をインポートし、最後に変更されたファイルを追跡できます。
find <Directory-name> -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r | head -n 1 | awk '{print $3}' | xargs tail -f