あるコマンドの出力を別のコマンドに渡す

あるコマンドの出力を別のコマンドに渡す

あるコマンドの出力を別のコマンドにパイプしようとしています。

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])'

それぞれ。

おすすめ記事