재귀 파일 목록의 깊이를 제한하는 방법은 무엇입니까?


346

리눅스에서 재귀 파일 목록의 깊이를 제한하는 방법이 있습니까?

현재 사용중인 명령은 다음과 같습니다.

ls -laR > dirlist.txt

그러나 약 200 개의 디렉토리가 있으며 각 디렉토리에는 10 개의 디렉토리가 있습니다. 따라서 너무 오래 걸리고 너무 많은 시스템 리소스가 필요합니다.

내가 정말로 관심이있는 것은 첫 번째 수준 하위 디렉토리에 대한 소유권 및 권한 정보입니다.

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

답변:


494

-maxdepth깃발을 체크 아웃find

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

여기서 1을 최대 수준 깊이로 사용했습니다. -type d디렉토리 만 찾아서 ls -ld긴 형식으로 내용 을 나열합니다.


2
OP는 디렉토리 자체의 권한을 알고 싶어하므로 -d옵션을에 추가해야합니다 ls.
피터 반 데르 Heijden

@ Peter Van der Heijden : 방금 find그의 주요 문제를 해결하기 위해 부분을 썼습니다 . 어쨌든 나는 그것을 추가하고 있습니다.
Alberto Zaccagni

3
내가 사용 -print0하고 xargs -0많은. 예 :find . -maxdepth 1 -type d -print0 | xargs -0 ls -d
Chris K

2
D 난 이미에 댓글을 달았습니다 : 아, 네, 확실히는 6 년 전하지만하지 않았다 잘못 알고 보이는 stackoverflow.com/a/25618630/57095 가 허용 해답이 될 것을.
Alberto Zaccagni

아 최대 깊이, 깊이 옵션이 있습니까?
Alexander Mills

95

의 만들기 사용 find의 옵션

실제로 /bin/ls필요한 exec는 없습니다.

찾기에는 다음과 같은 옵션이 있습니다.

find . -maxdepth 2 -type d -ls

관심있는 하나의 서브 디렉토리 레벨 만 보려면 -mindepth다음과 같은 레벨에 추가하십시오 -maxdepth.

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


출력 형식 사용

표시되는 세부 사항이 달라지면 -printf파일에 대한 세부 사항을 사용자 정의 형식으로 표시 할 수 있습니다. 상징적 권한과 파일의 소유자 이름을 표시하려면 사용 -printf으로 %M하고 %uformat.

나중에 그룹을 포함한 전체 소유권 정보가 필요하다는 것을 알게되었습니다. 사용 %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

1
@AlbertoZaccagni 우리는 짧은 답변을 좋아해서 빠르게 일을 처리 할 수 ​​있다고 생각합니다.
anddero

65

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

깊이 2 (-L 2)까지의 예쁜 형식으로 디렉토리 트리를 인쇄합니다. 사용자 (-u) 및 그룹 (-g) 및 권한 (-p)을 인쇄하십시오. 디렉토리 만 인쇄하십시오 (-d). tree에는 다른 유용한 옵션이 많이 있습니다.


12
나무는 사랑입니다. 나무는 생명이다.
yosefrow

어떤 경우에는 간단 tree -L 2 xxx/하거나 tree -L 2 -d xxx/충분합니다.
Eric Wang

1

내가 정말로 관심이있는 것은 첫 번째 레벨 하위 디렉토리에 대한 소유권 및 권한 정보입니다.

나는 당신의 필요에 완벽하게 맞는 내 물고기를 재생하는 동안 쉬운 해결책을 찾았습니다.

ll `ls`

또는

ls -l $(ls)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.