파일 수를 세지 않고 디렉터리의 파일 수 확인

파일 수를 세지 않고 디렉터리의 파일 수 확인

관련된:디렉토리의 파일 수를 계산하는 가장 좋은 방법은 무엇입니까?

내 시스템의 디렉토리에 많은 수의 파일이 있습니다.

 $ ls -god xml
 drwxrwsrwx   7 7070720 Mar 12 11:51 xml

시스템을 사용하여 특정 파일 그룹을 계산 하려고 하면 ls xml/*query | wc -l 일반적으로 오류 메시지가 생성됩니다.

 /bin/ls: arg list too long

10분 동안 시도했지만 find xml -name '*query' | wc -l응답이 없어서 명령을 종료했습니다.

$ nohup time find xml -name '*query' -level 0 | wc -l &
[1]     11751

$ ps -f 2>rgb
     UID   PID  PPID  C    STIME     TTY        TIME CMD
     rgb 11751 10637  0 02:45:11  ttyp12    00:00:00 wc -l
     rgb 11752 11751  0 02:45:11  ttyp12    00:00:00 time find xml -name *query -level 0
     rgb 11753 11752 77 02:45:11  ttyp12    00:00:03 find xml -name *query -level 0
     rgb 11776 10637  1 02:45:17  ttyp12    00:00:00 ps -f
     rgb 10583 10581  0 02:30:13  ttyp12    00:00:00 -csh
     rgb 10637 10583  2 02:30:19  ttyp12    00:00:00 ksh

top -Urgb

last pid: 11864;  load averages:  1.21,  0.82,  0.66                   14:48:03
249 processes: 246 sleeping, 2 running, 1 onproc
CPU states:  0.0% idle, 24.5% user, 75.5% system,  0.0% wait,  0.0% sxbrk
Memory: 2048M phys, 1799M max, 1718M free, 1774M locked, 114M unlocked, K swap

  PID USERNAME PRI NICE   SIZE   RES  STATE   TIME  COMMAND
11837 rgb       26    0   804K   804K onpr    0:00  top
11753 rgb       56    4  5512K  5512K run     1:10  find
11751 rgb       51    4   588K   588K sleep   0:00  wc
10583 rgb       48    0  1204K  1204K sleep   0:00  -csh
11752 rgb       48    4   588K   588K sleep   0:00  time
10637 rgb       48    0  1288K  1288K sleep   0:00  ksh

last pid: 12330;  load averages:  1.82,  1.45,  1.05                   14:58:06
258 processes: 253 sleeping, 4 running, 1 onproc
CPU states:  0.0% idle, 20.7% user, 78.7% system,  0.6% wait,  0.0% sxbrk
Memory: 2048M phys, 1799M max, 1711M free, 1774M locked, 106M unlocked, K swap

  PID USERNAME PRI NICE   SIZE   RES  STATE   TIME  COMMAND
11837 rgb       26    0   804K   804K onpr    0:00  top
11753 rgb       -1    4  5512K  5512K run     5:10  find
11751 rgb       51    4   588K   588K sleep   0:00  wc
10583 rgb       48    0  1204K  1204K sleep   0:00  -csh
11752 rgb       48    4   588K   588K sleep   0:00  time
10637 rgb       48    0  1288K  1288K sleep   0:00  ksh

$ jobs
[1] +  Running                 nohup time find xml -name '*query' -level 0 | wc -l &

$ kill %1
[1] + Terminated               nohup time find xml -name '*query' -level 0 | wc -l &

디렉터리 크기 7070720(예: 10% 이내)의 파일 수를 바꿀 수 있나요?주어진 ls -god xml?

추가 질문: 이는 파일 시스템(UFS, V7FS, HTFS 등)에 어느 정도 의존합니까?


고쳐 쓰다:

이 명령은 ls xml | wc -l몇 초 내에 값을 반환합니다. 질문을 게시하기 전에 이것을 시도했어야 했습니다. 이것은 내가 요청한 정보를 제공하므로 7070720 바이트 디렉토리에 얼마나 많은 파일 이름+inode 항목이 포함되어 있는지 계산할 필요가 없습니다(답변: 최소 260085).

답변1

ls출력물을 정렬하면 자원이 낭비됩니다. GNU가 있는 경우 ls다음을 수행하십시오.

ls --quoting-style=escape -U xml | wc -l

답변2

n=0; for file in ./*; do let "n += 1"; done; echo $n;

답변3

하다

set -- *
echo $#

일하다? set내장 쉘이므로 arg 제한의 영향을 받지 않을 수 있습니다 . 이는 도트 파일을 무시합니다. 보다 선택적인 글로브를 사용하면 필요한 것을 얻을 수 있습니다. 이것의 좋은 점은 포크나 튜브가 필요하지 않다는 것입니다.

답변4

이 명령이 정렬되지 않은 디렉터리 목록을 파이프하고 일치 항목 수를 계산하는 방법은 다음과 같습니다.

$ ls -U ./xml/ | grep -c 'query$'

*nix 기본 설정에 따라 ls -u대신 필요할 수도 있습니다.ls -U

관련 정보