Findコマンドを使用して、1つのディレクトリ内のすべてのファイルを検索したいと思います。
find . * -exec ll {} \;
結果は、ファイルごとに4つの(!)結果を示しています。
file123
./test/file123
file123
test/file123
Find-out-of-the-box-commandを使用して(./test/file123
などを使用せずに)2番目の結果| grep '^\./'
だけを表示することは可能ですか?
最新バージョンのHP/UXを使用しています。
find
に現在のディレクトリ(.
)と、*
が展開されるすべてのものを検索するように要求したため、4行の出力が得られます。
現在のディレクトリの場合、find
は、検出したものに対してll
を呼び出します。これは、現在のディレクトリ、test
ディレクトリ、およびtest
ディレクトリ内のファイルです。これはfile123
を2回リストします。
次に、*
が展開されるすべてのものを検索します。これは、test
ディレクトリになります。これで、ll
とその中のファイルでtest
が再び使用されます。これにより、ファイルが2回リストされます。
代わりに、通常のファイルを探している場合は、-type f
を使用してください。また、デフォルトで見つかったパス名が一覧表示されるため、ll
(またはls
)を使用してfind
から結果を取得する必要はありません。また、検索パスとしてfind
に現在のディレクトリ(またはtest
)を指定するだけです。
find . -type f
正確な名前がfile123
のファイルを探していることがわかっている場合:
find . -type f -name 'file123'
パス名ではなくls -l
のような出力が必要な場合:
find . -type f -name 'file123' -ls
_find . * -exec ll {} \;
_
_.
_と、test
サブディレクトリを含む現在のディレクトリ(シェルによって_*
_から展開された)内の非表示でないファイルのリストを渡します(これらのファイルのいずれかが_-
_または_!
_または_(
_、_)
_ ...というファイルがあった場合、find
は構文エラーを報告します)。
つまり、find
に、_.
_だけでなく、test
でもファイルを再帰的に検索するように指示していることになります。したがって、find
はtest
を2回検索し、_test/file123
_も2回検索します。
ll
は、_ls -l
_を実行するスクリプトであると思います。これは、ファイルの詳細、またはディレクトリタイプのファイルの場合、そのディレクトリ内のすべてのファイルの詳細を一覧表示するツールです(_-d
_オプション)。
したがって、ll
は_./test
_とtest
を引数として呼び出されます。その場合、ifはそのコンテンツ内のファイルの詳細(_test/file
_を含む)をリストします。
そして、それは_./test/file123
_と_test/file123
_で呼び出されます。
ここでは、次のようにします。
_find . -exec ls -ld {} +
_
(_+
_を使用すると、複数のファイルが引数としてls
に渡されます。これにより、より効率的になり、ls
でファイルのリストを並べ替えることができます)。
find
は、ビットリスト_-ls
_として動作する_ls -lsid
_述語をサポートする場合もあります。
_find . -ls
_
find
はすべてのディレクトリを再帰的に検索することに注意してください。
Findはファイルだけでなくディレクトリも返します!
テストディレクトリ内のすべてのファイルを一覧表示する場合、必要なのは次のコマンドだけです。find test/ -type f
また、何を達成しようとしているのかわかりませんが、find
のマンページを確認してください...-exec ll {} \;
を使用しており、おそらくfind
オプションがあると思います。必要なことを実行します(サイズ、変更日などでファイルをフィルタリングします)