次のように入力すると:
find . -name *foo* | ls -lah
入力がないかのように、プレーンなls
コマンドと同じ結果を返します。
しかしながら:
ls -lah $( find . -name *foo* )
find
コマンドに結果がある場合にのみ機能します。
ls
にパイプすることは可能ですか?
-exec
をfind
コマンドで使用できます。
find . -name '*foo*' -exec ls -lah {} \;
find . -name *foo* | xargs -r ls -lah
うまくいくはずです。
これを使用します:(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用ではありません)
これを試して:
find . -name *.bak -ls