locate
명령보다 훨씬 빠른 명령을 사용하십시오 find
.
테스트 데이터에서 실행
$ sudo updatedb # necessary if files in focus were added `cron` daily.
$ printf "Number Files: " && locate -0r "$PWD.*\.c$" | xargs -0 -I{} sh -c 'test ! -L "$1" && echo "regular file"' _ {} | wc -l && printf "Number Dirs.: " && locate -r "$PWD.*\.c$" | sed 's%/[^/]*$%/%' | uniq -cu | wc -l
Number Files: 29
Number Dirs.: 7
Muru 덕분에 Unix & Linux 의 파일 수에서 심볼릭 링크를 제거하는 데 도움을 준 그의 답변에 감사드립니다 .
Unix & Linux answer$PWD
에서 (나에게 지시되지 않음)에 대한 답변을 주신 Terdon에게 감사드립니다 .
아래의 원래 답변은 주석으로 참조
짧은 형식:
$ cd /
$ sudo updatedb
$ printf "Number Files: " && locate -cr "$PWD.*\.c$"
Number Files: 3523
$ printf "Number Dirs.: " && locate -r "$PWD.*\.c$" | sed 's%/[^/]*$%/%' | uniq -c | wc -l
Number Dirs.: 648
sudo updatedb
업데이트 데이터베이스에서 사용하는 locate
경우 명령을 .c
삭제 한 경우 파일이 오늘 생성 된 또는 .c
현재 파일을.
locate -cr "$PWD.*\.c$"
.c
현재 디렉토리에서 모든 파일을 찾고 하위 디렉토리 ( $PWD
)입니다. 파일 이름을 인쇄하는 대신 -c
인수로 인쇄 횟수를 계산 합니다. r
지정 대신 기본의 정규식 *pattern*
너무 많은 결과를 얻을 수 일치.
locate -r "$PWD.*\.c$" | sed 's%/[^/]*$%/%' | uniq -c | wc -l
. *.c
현재 디렉토리와 아래에서 모든 파일을 찾으십시오 . sed
디렉토리 이름 만 남겨두고 파일 이름을 제거하십시오 . 를 사용하여 각 디렉토리의 파일 수를 계산하십시오 uniq -c
. 로 디렉토리 수를 센다 wc -l
.
하나의 라이너로 현재 디렉토리에서 시작
$ cd /usr/src
$ printf "Number Files: " && locate -cr "$PWD.*\.c$" && printf "Number Dirs.: " && locate -r "$PWD.*\.c$" | sed 's%/[^/]*$%/%' | uniq -c | wc -l
Number Files: 3430
Number Dirs.: 624
파일 개수와 디렉토리 개수가 어떻게 변경되었는지 확인하십시오. 나는 모든 사용자가 /usr/src
디렉토리를 가지고 있다고 생각하고 설치된 커널 수에 따라 다른 수로 위의 명령을 실행할 수 있습니다.
긴 형태 :
긴 형식에는 시간이 포함되어 있으므로 얼마나 빨리 locate
끝났 는지 알 수 있습니다 find
. 당신이 sudo updatedb
그것을 실행 해야하는 경우에도 하나보다 몇 배 빠릅니다 find /
.
───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads$ sudo time updatedb
0.58user 1.32system 0:03.94elapsed 48%CPU (0avgtext+0avgdata 7568maxresident)k
48inputs+131920outputs (1major+3562minor)pagefaults 0swaps
───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads$ time (printf "Number Files: " && locate -cr $PWD".*\.c$")
Number Files: 3523
real 0m0.775s
user 0m0.766s
sys 0m0.012s
───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads$ time (printf "Number Dirs.: " && locate -r $PWD".*\.c$" | sed 's%/[^/]*$%/%' | uniq -c | wc -l)
Number Dirs.: 648
real 0m0.778s
user 0m0.788s
sys 0m0.027s
───────────────────────────────────────────────────────────────────────────────────────────
참고 : 이것은 모든 드라이브 및 파티션의 모든 파일입니다 . 즉, Windows 명령도 검색 할 수 있습니다.
$ time (printf "Number Files: " && locate *.exe -c)
Number Files: 6541
real 0m0.946s
user 0m0.761s
sys 0m0.060s
───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads$ time (printf "Number Dirs.: " && locate *.exe | sed 's%/[^/]*$%/%' | uniq -c | wc -l)
Number Dirs.: 3394
real 0m0.942s
user 0m0.803s
sys 0m0.092s
세 개의 Windows 10 NTFS 파티션이 자동으로 마운트되어 /etc/fstab
있습니다. 위치는 모든 것을 알고 있음을 명심하십시오!
재미있는 수 :
$ time (printf "Number Files: " && locate / -c && printf "Number Dirs.: " && locate / | sed 's%/[^/]*$%/%' | uniq -c | wc -l)
Number Files: 1637135
Number Dirs.: 286705
real 0m15.460s
user 0m13.471s
sys 0m2.786s
286,705 개의 디렉토리에서 1,637,135 개의 파일을 계산하는 데 15 초가 걸립니다. YMMV.
locate
명령의 정규식 처리 에 대한 자세한 내용 은 (이 Q & A에 필요하지 않지만 경우에 따라 사용되는 것으로 나타남) 다음을 읽으십시오. 특정 디렉토리에서 "locate"를 사용 하시겠습니까?
최근 기사에서 추가로 읽은 내용 :