あるコマンドの出力を別のコマンドにパイプしようとしています。
ls -lt *.txt | tail -n 3 | cat
.txt
すべてのファイルを一覧表示し、最後の2つのファイルをインポートしてから、その内容を表示したいのですが、cat
これは正しい方法ではありません。この目標をどのように達成できますか?私は言及しましたhttps://unix.stackexchange.com/a/108797/431721を試してみましたが、うまくcat $( ls -lt *.txt | tail -n 3)
いきません。どんなアドバイス?
ベストアンサー1
可能なすべてのファイル名(改行を含むファイル名を含む)を正しく処理するために、次のコマンドはcat
シェルを使用して最後に変更された2つのファイルを呼び出し、最も古いファイルを最後に処理しますzsh
。
cat ./*.txt(.om[-2,-1])
以下は、最近修正された2つのファイルですcat
。最後に変更されたファイルを最初に処理します。
cat ./*.txt(.om[1,2])
ここで、ワイルドカードパターンは次の(.om[1,2])
とおりです。./*.txt
グローバル予選。.
修飾子では、パターンが通常のファイル(ディレクトリなどではない)にのみ一致するようにします。om
修正タイムスタンプに基づいてファイルを並べ替えます(Om
順序は反対です)。結果リストの最初の2つの要素のみ[1,2]
が選択されます。ここで、負のインデックスはリストの最後から計算されます。
シェルで他のユーティリティと同じようにbash
使用してください。zsh
zsh -c 'cat ./*.txt(.om[-2,-1])'
そして
zsh -c 'cat ./*.txt(.om[1,2])'
それぞれ。