探す。 * -exec ll {} \ -> 4つではなくたった1つの結果

探す。 * -exec ll {} \ -> 4つではなくたった1つの結果

findコマンドを使用してディレクトリ内のすべてのファイルを検索したいと思います。

find . * -exec ll {} \;

結果には、ファイルごとに4つの(!)結果が表示されます。

  • file123
  • ./test/file123
  • file123
  • test/file123

2番目の結果のみを表示するには、find-out-of-the-box-commandを使用できますか./test/file123(したがってそのようなものを使用しません| grep '^\./')?

私は最新バージョンのHP / UXを使用しています。

答え1

find . * -exec ll {} \;

サブディレクトリを含む.現在のディレクトリにある隠しファイル(シェルによって拡張された)のリストと一緒に渡されます(これらのファイルのいずれかが、で始まる、または名前またはファイルがある場合... )エラーが報告されます)。*test-!()find

したがって、findファイルを再帰的に検索するように指示します。したがって、ファイルは2回、2回見つかります。.testfindtesttest/file123

llls -lこれは、ファイルの詳細またはディレクトリタイプのファイルを一覧表示し、そのディレクトリ内のすべてのファイルの詳細を一覧表示するツールであるスクリプトだと思います(-dオプションを渡さない限り)。

soは引数としてll呼び出されます。この場合、ifはその内容にファイルの詳細(含まれている)を一覧表示します。./testtesttest/file

./test/file123とで呼び出されますtest/file123

希望する場所は次のとおりです。

find . -exec ls -ld {} +

(使用は、+複数のファイルがより効率的な引数として渡され、lsファイルのリストもlsソートできることを意味します。)

ビットリストで表される述語をfindサポートすることもできます。-lsls -lsid

find . -ls

答え2

find現在のディレクトリ(.)と*そのディレクトリに展開されているすべての項目を検索するように要求するため、4行の出力が表示されます。

現在のディレクトリの場合、現在のディレクトリ、ディレクトリ、およびディレクトリのファイルとなる検索内容を引き続きfind呼び出します。これは2回リストされます。lltesttestfile123

*次に、展開されたすべての項目(ディレクトリ)を検索しますtest。これで再利用できlltestその中にあるファイルを使用できるようになります。ファイルが再度 2 回リストされます。

代わりに一般的なファイルを見つけるにはを使用してください。デフォルトでは検索されたパス名がリストされているため、結果を取得するために(または)を-type f使用する必要はありません。また、現在のディレクトリ(または)を検索パスとして使用してください。lllsfindfindtest

find . -type f

正しい名前のファイルを探している場合file123

find . -type f -name 'file123'

ls -lパス名の代わりに同様の出力が必要な場合:

find . -type f -name 'file123' -ls

答え3

検索はすべてのディレクトリで繰り返しfind実行されます。
検索はファイルだけでなくディレクトリも返します!

テストディレクトリ内のすべてのファイルを一覧表示するには、次のコマンドだけが必要です。
find test/ -type f

また、私はあなたが何を達成しようとしているのかわかりませんが、findマンページをチェックしています-exec ll {} \;find)

関連情報