絶対パスを使用して特定のクエリを検索して一覧表示する

絶対パスを使用して特定のクエリを検索して一覧表示する

私はフォルダパスを繰り返し、特定のサブフォルダ名から.summary拡張子を持つすべてのファイルを見つけ、lsコマンドの詳細として返す簡単な操作を実行するために検索しましたが、ファイルの絶対パスを使用しました。

ディスク構造は次のとおりです。

-root--disk--folder1--subfolder--a.summary  
-root--disk--folder2--subfolder--b.summary  
-root--disk--folderX--subfolder--X.summary  

これが私が持っているものです:-

ls -lR | grep summary  
-rw-r-----  1 username group 14150 Sep  8 22:41 a.summary  
-rw-r-----  1 username group 10150 Sep  9 22:41 b.summary  

この結果を得たいです。

-rw-r-----  1 username group 14150 Sep  8 22:41 /root/disk/folder1/subfolder/a.summary  
-rw-r-----  1 username group 10150 Sep  9 22:41 /root/disk/folder2/subfolder/b.summary  

権限の拒否に問題がある多くのパスがある場合は、タスクを完了するより速い方法がありますか?

ベストアンサー1

find /root/disk -path '*/subfolder/*.summary' -exec ls -ld {} +

(一部の実装では、findファイルパスが現在のロケールの有効なテキストであると想定されます。)

このコマンドは、.summary名前付きディレクトリsubfolderだけでなく、そのディレクトリのサブディレクトリでもファイルを検索し、*sを/上記の文字まで拡張できます-path。サブディレクトリのファイルを除外するには、追加できますが、たとえば! -path '*/subfolder/*/*'除外されます/root/disk/subfolder/foo/subfolder/a.summary。一部のfind実装には-regex正規表現とパスを一致させる実装があり、それを使用できます-regex '.*/subfolder/[^/]*\.summary'

さまざまなfind実装により、わずかに異なる出力形式を代わりに使用できます-ls(ファイルパスを並べ替えません)。-exec ls -ld {} +

アクセスできないディレクトリのエラーを非表示にするには、エラーを/dev/nullにリダイレクトできます2> /dev/null

または単に使用してくださいzsh

ls -ld /root/disk/**/subfolder/*.summary(DoN)

ソートされたリスト²にはロケールの問題はありませんが、ディレクトリがディレクトリdisksubfolderのシンボリックリンクの場合はそのディレクトリを参照し、ファイルのリストが大きすぎるとコマンドが失敗する可能性があります(zargsこのトラブルシューティングを参照)。

シンボリックリンクの巡回を防ぐには、subfolder次のように変更できます。

ls -ld /root/dir/**/*.summary(DoNe['[[ $REPLY:h:t = subfolder ]]'])

eval glob修飾子を使用して、パスのteadが中断されたことを確認します(zshのシンボリックリンクは決して従わない)。hsubfolder**/


with は-exec ls -ld {} +引数lsで受け取ったファイルを名前でソートしますが、lsファイル数が非常に多いと複数回呼び出される可能性があるため、ファイルが独立してソートされたバッチで終わることがあることに注意してください。

²ここでは、glob修飾子を使用してoNglobのリストをN並べ替えます。とにかく自己整列を行うo地上での最適化です。ls

おすすめ記事