web-dev-qa-db-ja.com

パイプ入力をlsコマンドに転送するにはどうすればよいですか?

次のように入力すると:

find . -name *foo* | ls -lah

入力がないかのように、プレーンなlsコマンドと同じ結果を返します。

しかしながら:

ls -lah $( find . -name *foo* )

findコマンドに結果がある場合にのみ機能します。

lsにパイプすることは可能ですか?

20
Lasall

-execfindコマンドで使用できます。

find . -name '*foo*' -exec ls -lah {} \;
25
find . -name *foo* | xargs -r ls -lah

うまくいくはずです。

20
freethinker

これを使用します:(lsは並べ替えることができ、スペースまたは異常な文字を含むファイル名で動作します)

find . -name *foo* -print0 | xargs -0 ls -lah

「-print0」は、file foo 1などのファイル名がfindの後にnullが続く出力を取得することを意味します。 xargsの "-0"引数は、この種の入力を予期するように指示するため、スペースを含むファイル名はlsコマンドに正しくパイプされます。

xargsの構築は、いくつかの点でfind etc -exec ls {} \;よりも優れています。これは、すべてのファイル名が一度にlsに送信されるため、タイムスタンプ(lsを使用)

find . -iname *pdf -print0 | xargs -0 ls -ltr

NetBSDシステムでは、「-printx」もオプションです(これは私にとって有用な引数のようですが、xargs -0があり、大丈夫です):

find . -name *foo* -printx | xargs ls -lah(Ubuntu用ではありません)

3
Peter Kay

これを試して:

find  . -name *.bak -ls
3
Dennis