私はフォルダパスを繰り返し、特定のサブフォルダ名から.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)
ソートされたリスト²にはロケールの問題はありませんが、ディレクトリがディレクトリdisk
へsubfolder
のシンボリックリンクの場合はそのディレクトリを参照し、ファイルのリストが大きすぎるとコマンドが失敗する可能性があります(zargs
このトラブルシューティングを参照)。
シンボリックリンクの巡回を防ぐには、subfolder
次のように変更できます。
ls -ld /root/dir/**/*.summary(DoNe['[[ $REPLY:h:t = subfolder ]]'])
e
val glob修飾子を使用して、パスのt
eadが中断されたことを確認します(zshのシンボリックリンクは決して従わない)。h
subfolder
**/
with は-exec ls -ld {} +
引数ls
で受け取ったファイルを名前でソートしますが、ls
ファイル数が非常に多いと複数回呼び出される可能性があるため、ファイルが独立してソートされたバッチで終わることがあることに注意してください。
²ここでは、glob修飾子を使用してoN
globのリストをN
並べ替えます。とにかく自己整列を行うo
地上での最適化です。ls
答え2
で終わるファイルをインポートするには、そのextension
親ディレクトリは次の名前のディレクトリである必要がありますsubfolder
。
find . -type d -name subfolder -exec sh -c 'ls -l "$0"/*.extension' {} \;
または、execdirオプションを使用できます
find . -type f -name '*.extension' -execdir bash -c '[ "$(basename "$PWD")" == "subfolder" ] && echo "$PWD/$0"' {} \;