programing

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

goodsources 2023. 4. 26. 23:17
반응형

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

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

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

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

다음 항목을 확인하십시오.-maxdepth의 깃발.find

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

여기서 나는 최대 레벨 깊이로 1을 사용했습니다.-type d디렉터리만 찾는다는 의미입니다. 그러면ls -ld의 내용을 긴 형식으로 나열합니다.

을 활용find의 옵션

의 임원은 실제로 없습니다./bin/ls필요함;

찾기 옵션은 다음과 같습니다.

find . -maxdepth 2 -type d -ls

관심 있는 하위 디렉터리의 한 수준만 보려면 다음을 추가합니다.-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이미 알고 있습니다.

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

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

제가 관심 있는 것은 첫 번째 수준의 하위 디렉터리에 대한 소유권 및 권한 정보입니다.

나는 내 물고기를 놀다가 쉬운 해결책을 찾았고, 그것은 당신의 요구에 완벽하게 들어맞았습니다.

ll `ls`

또는

ls -l $(ls)

언급URL : https://stackoverflow.com/questions/4509624/how-to-limit-depth-for-recursive-file-list

반응형