最近変更された4つのファイルを追跡する方法は?

最近変更された4つのファイルを追跡する方法は?

非常に単純なものが欠けているようで、最後の4つの修正ファイルの最後の数行をシードすることが可能かどうか疑問に思います。私はこれを試しました

tail | ls -lt | head -5

ところで、結果を繰り返してtailを適用しなければならないようですが、どうすればよいかls | -ltわかりません。助けてくれてありがとう。

答え1

ls始める前に通常、出力を他の項目の入力として使用することは悪い習慣と見なされます。一般的なトラップは、名前にスペース/改行が含まれているファイルの場合、期待どおりに機能しない可能性があることです。

ls | somethingこれらの制限を考慮すると、ほとんどの場合、この方法が正しく機能することがわかります。

あなたの命令は正しい方向に進んでいます。上記のls制限がある解決策は次のとおりです。

ls -t | head -5 | xargs tail

リストにサブディレクトリがあると、致命的ではないエラーが発生します。

答え2

zshシェルでは、グロービングモードを使用して、現在のディレクトリで最も最近変更された4つの一般的なファイルをインポートできます。

./*(.Dom[1,4])

..../*現在のディレクトリのすべての名前が一致し、括弧は一致の動作を変更します。試合は順調に.進んだ。*ただ通常のファイルを使用Dして、隠された名前と一致するようにします(シェルdotglobでシェルオプションが有効になっている場合と同様bash)。om修正タイムスタンプに基づいて結果名のリストを並べ替え、[1,4]上位4つの名前を選択します。

tailこれらのファイルを呼び出すには、次のようにします。

tail ./*(.Dom[1,4])

bashシェルから:

zsh -c 'tail ./*(.Dom[1,4])'

現在のディレクトリまたはその下のすべてのファイルを考慮するには、次のようにします。

zsh -c 'tail ./**/*(.Dom[1,4])'

シェルオプションを有効にすると、この**パターンはサブディレクトリに繰り返し一致するという点で同じワイルドカードパターンと同じように機能します。 in glob修飾子は、隠された名前のサブディレクトリと一致します。bashglobstarD**

答え3

おそらくこれがあなたに役立つでしょう

find . -type f -mmin -5 -ls | tail -4

=>の代わりにターゲット. ディレクトリパスを追加してください。

上記のコマンドは、5分前に最後に変更されたファイルを提供します。必要に応じて、最後の修正時間(分)を5分から必要な値に増やすことができます。eg: 15min , 20min , 60min

答え4

サブディレクトリがない場合は、ファイル名にスペースがあっても機能します。ただし、ファイル名に改行文字が含まれていると失敗します。

ls -1t | head -4 | tr '\n' '\0' | xargs -0 head -10

残念ながら、サブディレクトリがあると失敗します。もしそうなら、これはうまくいくはずです

find . -type f -maxdepth 1 -print0 | xargs -0 ls -1t | head -4 | tr '\n' '\0' | xargs -0 head -10

関連情報