再帰的なファイルリストの深さを制限する方法は?


346

Linuxで再帰的なファイルリストの深さを制限する方法はありますか?

現在使用しているコマンドは次のとおりです。

ls -laR > dirlist.txt

しかし、私は約200のディレクトリを持っており、それぞれに10のディレクトリがあります。したがって、時間がかかりすぎて、システムリソースを大量に消費することになります。

私が本当に興味を持っているのは、第1レベルのサブディレクトリの所有権と権限の情報だけです。

drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk  
drwxr--r-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/htdocs  
drwxr--r-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/cgi-bin  
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk  
drwxr-xrwx 14 proftp root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk/htdocs  
drwxr-xrwx 14 proftp root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk/cgi-bin  
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk  
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk/htdocs  
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk/cgi-bin  
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk  
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk/htdocs
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk/cgi-bin

編集:

コマンドの最終的な選択:

find -maxdepth 2 -type d -ls >dirlist

3
あなたも好きls -la /var/www/vhosts/*ですか?
KevinO 2016年

回答:


494

-maxdepth旗をチェックアウトfind

find . -maxdepth 1 -type d -exec ls -ld "{}" \;

ここでは、最大レベルの深さとして1を使用しました。-type dつまり、ディレクトリのみを検索し、そのls -ld内容を長い形式でリストします。


2
OPはディレクトリ自体の権限を知りたいので、に-dオプションを追加する必要がありますls
Peter van der Heijden

@ピーター・ファン・デル・ハイデン:私はfind彼の主な問題を解決するための部分を書いたところです。とにかく、私はそれを追加しています。
Alberto Zaccagni 2010

3
I使用-print0してxargs -0たくさん。例:find . -maxdepth 1 -type d -print0 | xargs -0 ls -d
クリスK 14年

2
D私はすでにコメントしました:ああ、確かにそれはそれは6年前にかかわらなかった、間違ったノウハウを探しますstackoverflow.com/a/25618630/57095それは受け入れ答えなければならないこと。
Alberto Zaccagni 2016

ahhh maxdepth、深度オプションはありますか?
Alexander Mills

95

findのオプションを利用する

実際には/bin/ls必要なexecはありません。

検索には、それを行うオプションがあります。

find . -maxdepth 2 -type d -ls

関心のある1レベルのサブディレクトリのみを表示する-mindepthには、次と同じレベルに追加します-maxdepth

find . -mindepth 2 -maxdepth 2 -type d -ls


出力フォーマットを使用する

表示される詳細が異なる場合-printfは、カスタム形式でファイルに関する詳細を表示できます。シンボリック権限とファイルの所有者名を表示するには-printf%M%uで使用しますformat

後で、グループを含む完全な所有権情報が必要になることに気付きました。%gシンボリック名または%GグループID(%U数値ユーザーIDの場合と同様)の形式で使用します

find . -mindepth 2 -maxdepth 2 -type d -printf '%M %u %g %p\n'

これにより、適切なファイルについて、必要な詳細情報のみが表示されます。

ユーザーとグループの実際に異なる値を示す例を示します。

$ sudo find /tmp -mindepth 2 -maxdepth 2 -type d -printf '%M %u %g %p\n'
drwx------ www-data  www-data /tmp/user/33
drwx------ octopussy root     /tmp/user/126
drwx------ root      root     /tmp/user/0
drwx------ siegel    root     /tmp/user/1000
drwxrwxrwt root      root     /tmp/systemd-[...].service-HRUQmm/tmp

(読みやすいように編集:インデント、最終行を短縮)


パフォーマンスに関する注意

実行時間はこの種のコマンドにはほとんど関係ありませんが、パフォーマンスの向上はここで指摘できるほど大きくなっています。

名前ごとに新しいプロセスの作成を保存するだけでなく、巨大なタスクfindです。すでに知っているように、情報を読み取る必要すらありません。


9
これは私の答えよりもはるかに良い、受け入れられる答えになるはずです。
Alberto Zaccagni 16

1
@AlbertoZaccagni私は物事を迅速に機能させるために短い答えが好きだと思います。
anddero 2017

65

tree -L 2 -u -g -p -d

深さ2(-L 2)までのきれいな形式でディレクトリツリーを出力します。ユーザー(-u)とグループ(-g)およびアクセス権(-p)を出力します。ディレクトリのみを出力します(-d)。ツリーには他にも多くの便利なオプションがあります。


12
木は愛です。木は命です。
yosefrow 2017

単にtree -L 2 xxx/またはtree -L 2 -d xxx/いくつかのケースでは十分です。
Eric Wang

1

私が本当に興味を持っているのは、第1レベルのサブディレクトリの所有権と権限の情報だけです。

私は魚をプレイしているときに簡単な解決策を見つけました。これはあなたのニーズに完全に適合します。

ll `ls`

または

ls -l $(ls)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.