리눅스 디렉터리의 파일을 반복적으로 계산합니다.
Linux 디렉토리의 파일을 반복적으로 계산하려면 어떻게 해야 합니까?
이걸 찾았어요
find DIR_NAME -type f ¦ wc -l
그러나 이 프로그램을 실행하면 다음과 같은 오류가 반환됩니다.
찾기: 경로는 식 ¦ 앞에 와야 합니다.
이렇게 하면 됩니다.
find DIR_NAME -type f | wc -l
설명:
-type f
이겁니다.|
(및 아님) 리디렉션합니다.find
명령어의 출력입니다.wc
이겁니다.wc
(워드 카운트의 줄임말) 입력에서 줄임말, 워드 및 바이트를 카운트합니다(입력).-l
줄만 세면 돼요
주의:
- 체하다다를 바꿉니다.
DIR_NAME
와와 with와 함께요..
이겁니다. - 그리고 이 때 빼도 돼요.
-type f
개수에 디렉터리(및 심볼 링크)를 포함합니다. - 파일 이름에 줄 바꿈 문자가 포함될 수 있는 경우 이 명령이 초과될 수 있습니다.
예제가 작동하지 않는 이유를 설명합니다.
보여드린 에서는 "파이프"(파이프)를 사용하지 않습니다.|
두 개의 명령어를 연결하지만, 끊어진 막대(마지막으로 하다)를 연결합니다. 러러 ). ). ). ). ). ). ). ). ). ).( )입니다.¦
셸이 명령 또는 유사한 명령으로 인식하지 않습니다.네, 그렇습니다.
현재 디렉터리에 대해 다음을 수행합니다.
find -type f | wc -l
현재 dir 아래의 각 dir에 있는 파일 수를 분석하려면 다음과 같이 하십시오.
for i in */ .*/ ; do
echo -n $i": " ;
(find "$i" -type f | wc -l) ;
done
물론 이 모든 것을 한 줄에 담을 수 있습니다.괄호는 누구의 출력인지 명확히 합니다.wc -l
보고 있어야 합니다.find $i -type f
이렇게 말합니다.
제 컴퓨터에는요,rsync
더 빠르다고 할 수 있습니다.find | wc -l
이겁니다.
$ rsync --stats --dry-run -ax /path/to/dir /tmp
Number of files: 173076
Number of files transferred: 150481
Total file size: 8414946241 bytes
Total transferred file size: 8414932602 bytes
두 번째 줄에는 위의 예에서 150,481개의 파일 수가 있습니다.보너스로 총 크기(바이트)도 제공됩니다.
비고:
- 첫 번째 줄은 파일, 디렉토리, 심볼링크 등의 수를 모두 합친 것이므로 두 번째 줄보다 큽니다.
- 더 »
--dry-run
(혹은 (?)요?)-n
즉, 파일을 실제로 전송하지 않으려면 옵션이 중요합니다. - 사용했어요.
-x
파일 시스템 경계를 넘나들지 즉, "파일 시스템 경계를 넘나들지 마십시오."에 대해 실행할 경우 이 옵션을 선택합니다./
외장 하드 디스크가 연결되어 있으면 루트 파티션의 파일만 계산됩니다.
사용할 수 있습니다.
$ tree
트리 패키지를 설치한 후 다음을 수행합니다.
$ sudo apt-get install tree
(Debian / Mint / Ubuntu Linux 머신에 있습니다).
이 명령은 파일 수뿐만 아니라 디렉터리 수도 별도로 표시합니다.L 옵션을 사용하여 최대 표시 수준(기본적으로 디렉터리 트리의 최대 깊이)을 지정할 수 있습니다.
숨김 파일은 숨김 파일도 포함할 수 있습니다.-a
네, 그렇습니다.
UNIX의 에는 줄 바꿈(예, 줄 바꿈)이 포함될 수 있으므로 UNIX는 줄 바꿈(예, 줄 바꿈)을 포함합니다.wc -l
이겁니다.모든 파일에 대해 점을 찍어낸 다음 점을 셉니다.
find DIR_NAME -type f -printf "." | wc -c
참고 하다: 하다.-printf
GNU findutils를 찾습니다.맥입니다.
여기에 나와 있는 몇 가지 답변을 종합하면 가장 유용한 솔루션은 다음과 같습니다.
find . -maxdepth 1 -type d -print0 |
xargs -0 -I {} sh -c 'echo -e $(find "{}" -printf "\n" | wc -l) "{}"' |
sort -n
공백 괄호가 포함된 파일 이름이나 새 줄과 같은 이상한 것들을 처리할 수 있습니다.또한 파일 수를 기준으로 출력을 정렬합니다.
이렇게 하다보다 뒤에 숫자를 늘릴 수 있습니다.-maxdepth
높은 중첩 디렉터리 구조와 높은 중첩 디렉터리 구조를 함께 사용하는 경우 시간이 오래 걸릴 수 있습니다. 특히 높은 디렉토리 구조와 높은 디렉토리 구조를 함께 사용하는 경우 더 그렇습니다.-maxdepth
네, 그렇습니다.
현재 작업 디렉터리에 있는 파일 및 하위 디렉터리의 수를 알고 싶다면 이 한 줄을 사용할 수 있습니다.
find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo -e $(find {} | wc -l) {}' | sort -n
이것은 GNU 플레이버에서 작동하며 BSD Linux(예: OSX)의 경우 echo 명령에서 -e를 생략합니다.
명령을 사용할 수 있습니다.리눅스 디렉터리에 포함된 파일 수를 반복적으로 계산합니다.다음은 출력의 예입니다.
진행 표시줄이 있어 파일이 많을 때 편리합니다.
Ubuntu에 설치하려면 다음을 수행합니다.
sudo apt-get install -y ncdu
벤치마크:파일 수를 세는 폴더로는 https://archive.org/details/cv_corpus_v1.tar(380390 파일, 11GB)을 사용했습니다.
find . -type f | wc -l
약 1m20s 완료: 1 1m20s 성 1 1m20s 。ncdu
약 1m20s 완료: 1 1m20s 성 1 1m20s 。
특정 파일 형식을 반복적으로 계산해야 하는 경우 다음을 수행할 수 있습니다.
find YOUR_PATH -name '*.html' -type f | wc -l
-l
이겁니다.
특정 폴더를 제외해야 할 경우에는 을 사용하세요.-not -path
find . -not -path './node_modules/*' -name '*.js' -type f | wc -l
tree $DIR_PATH | tail -1
샘플 출력:
5309개의 디렉토리, 2122개의 파일입니다.
에러 케이스를 피하고 싶다면, 에러 케이스를 허용하지 마세요.wc -l
줄 바꿈이 있는 파일(2개 이상의 파일로 계산됨)을 보려면 을 클릭하십시오.
예를 들어 단일 EOL 문자가 포함된 단일 파일이 있는 경우를 생각해 보십시오.
> mkdir emptydir && cd emptydir
> touch $'file with EOL(\n) character in it'
> find -type f
./file with EOL(?) character in it
> find -type f | wc -l
2
적어도 gnu는 gnu이기 때문입니다.wc
에는 null 종료된 목록(파일 제외)을 읽거나 카운트하는 옵션이 것 같습니다. 가장 쉬운 해결책은 파일 이름을 전달하지 않고 파일이 발견될 때마다 정적 출력(예: 위와 같은 디렉토리(예: null)에 출력하는 것입니다. 가장 쉬운 해결책은 파일 이름을 전달하지 않고 파일이 발견될 때마다(예: 위와 같은 디렉터리에서) 정적 출력을 제공하는 것입니다.
> find -type f -exec printf '\n' \; | wc -l
1
아니면 만약 당신이요?find
그것을 지지합니다.
> find -type f -printf '\n' | wc -l
1
현재 디렉터리에 몇 개의 파일이 확인하려면 을(를) 넣으십시오.ls -1 | wc -l
. 이것은 . 을 사용해요wc
줄 수를 (-l)
of결 of of of of of of of의 출력에 있습니다.ls -1
이겁니다.주의해 주세요.ls -l
이전 버전의 HOWTO에서 사용한 파일 수는 실제 수보다 한 개 더 많습니다.캄네자드입니다.
심볼 링크를 포함하지 않고 파일만 계산하려면(다른 작업을 수행할 수 있는 예에 불과함) 다음을 사용할 수 있습니다.ls -l | grep -v ^l | wc -l
('1'은 'L'은 'L'은 'L'은 'L'은'은요. 이렇게 말합니다.)grep
는 "l"(링크 연결)로 시작하는 행을 한 후 해당 행(-v)을 삭제합니다.
상대 속도: "ls -1 /usr/bin/ | wc -l"은 언로드된 486SX25에서 약 1.03초 걸립니다(이 기계의 /usr/bin/에는 355개의 파일이 있습니다).를 클릭합니다.ls -l /usr/bin/ | grep -v ^l | wc -l
1.19초 정도 .
출처: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x700.html입니다.
bash 포함:
( )를 사용하여 항목 배열을 생성하고 #를 사용하여 개수를 가져옵니다.
FILES=(./*); echo ${#FILES[@]}
네, 파일이 반복적으로 카운트되지 않지만 먼저 간단한 옵션을 보여드리고 싶었습니다.일반적인 사용 사례는 파일의 롤오버 백업을 생성하는 것일 수 있습니다.그러면 logfile.1, logfile.2, logfile.3 등이 생성됩니다.
CNT=(./logfile*); mv logfile logfile.${#CNT[@]}
bash 4+bash 4+인 재귀 카운트입니다.globstar
@subliceee (( @sublicee 에에 @sublicee.
FILES=(**/*); echo ${#FILES[@]}
파일 수를 재귀적으로 가져오려면 동일한 방법으로 찾기를 사용할 수 있습니다.
FILES=(`find . -type f`); echo ${#FILES[@]}
이름에 공백이 있는 디렉토리의 경우(위의 다양한 답변에 기반) - 디렉토리 이름을 파일 수로 반복 인쇄합니다.
find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done
예(가독성을 위해 포맷됨):
pwd
/mnt/Vancouver/Programming/scripts/claws/corpus
ls -l
total 8
drwxr-xr-x 2 victoria victoria 4096 Mar 28 15:02 'Catabolism - Autophagy; Phagosomes; Mitophagy'
drwxr-xr-x 3 victoria victoria 4096 Mar 29 16:04 'Catabolism - Lysosomes'
ls 'Catabolism - Autophagy; Phagosomes; Mitophagy'/ | wc -l
138
## 2 dir (one with 28 files; other with 1 file):
ls 'Catabolism - Lysosomes'/ | wc -l
29
디렉토리 는 보다 잘 시각화됩니다.tree
다음을 참조하십시오
tree -L 3 -F .
.
├── Catabolism - Autophagy; Phagosomes; Mitophagy/
│ ├── 1
│ ├── 10
│ ├── [ ... SNIP! (138 files, total) ... ]
│ ├── 98
│ └── 99
└── Catabolism - Lysosomes/
├── 1
├── 10
├── [ ... SNIP! (28 files, total) ... ]
├── 8
├── 9
└── aaa/
└── bbb
3 directories, 167 files
man find | grep mindep
-mindepth levels
Do not apply any tests or actions at levels less than levels
(a non-negative integer). -mindepth 1 means process all files
except the starting-points.
ls -p | grep -v /
(아래에서 사용됨)은 https://unix.stackexchange.com/questions/48492/list-only-regular-files-but-not-directories-in-current-directory의 답변 2에 나와 있습니다.
find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done
./Catabolism - Autophagy; Phagosomes; Mitophagy: 138
./Catabolism - Lysosomes: 28
./Catabolism - Lysosomes/aaa: 1
응용 프로그램:수백 개의 디렉터리 중 최대 파일 수(전체 깊이 = 1)를 찾고 싶습니다. [아래 출력은 읽기 쉽도록 다시 포맷되었습니다.]
date; pwd
Fri Mar 29 20:08:08 PDT 2019
/home/victoria/Mail/2_RESEARCH - NEWS
time find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done > ../../aaa
0:00.03
[victoria@victoria 2_RESEARCH - NEWS]$ head -n5 ../../aaa
./RNA - Exosomes: 26
./Cellular Signaling - Receptors: 213
./Catabolism - Autophagy; Phagosomes; Mitophagy: 138
./Stress - Physiological, Cellular - General: 261
./Ancient DNA; Ancient Protein: 34
[victoria@victoria 2_RESEARCH - NEWS]$ sed -r 's/(^.*): ([0-9]{1,8}$)/\2: \1/g' ../../aaa | sort -V | (head; echo ''; tail)
0: ./Genomics - Gene Drive
1: ./Causality; Causal Relationships
1: ./Cloning
1: ./GenMAPP 2
1: ./Pathway Interaction Database
1: ./Wasps
2: ./Cellular Signaling - Ras-MAPK Pathway
2: ./Cell Death - Ferroptosis
2: ./Diet - Apples
2: ./Environment - Waste Management
988: ./Genomics - PPM (Personalized & Precision Medicine)
1113: ./Microbes - Pathogens, Parasites
1418: ./Health - Female
1420: ./Immunity, Inflammation - General
1522: ./Science, Research - Miscellaneous
1797: ./Genomics
1910: ./Neuroscience, Neurobiology
2740: ./Genomics - Functional
3943: ./Cancer
4375: ./Health - Disease
sort -V
자연스러운 종류입니다.따라서 이러한 (Claws Mail) 디렉토리의 최대 파일 수는 4375개입니다.왼쪽 패드(https://stackoverflow.com/a/55409116/1904943) 파일 이름)를 누르면, 각 디렉토리에서 1로 시작하는 숫자로 이름이 지정되고, 총 5자리로 패딩하면 됩니다.
부록입니다.
디렉토리에서 총 파일, 하위 디렉터리 수를 찾습니다.
$ date; pwd
Tue 14 May 2019 04:08:31 PM PDT
/home/victoria/Mail/2_RESEARCH - NEWS
$ ls | head; echo; ls | tail
Acoustics
Ageing
Ageing - Calorie (Dietary) Restriction
Ageing - Senescence
Agriculture, Aquaculture, Fisheries
Ancient DNA; Ancient Protein
Anthropology, Archaeology
Ants
Archaeology
ARO-Relevant Literature, News
Transcriptome - CAGE
Transcriptome - FISSEQ
Transcriptome - RNA-seq
Translational Science, Medicine
Transposons
USACEHR-Relevant Literature
Vaccines
Vision, Eyes, Sight
Wasps
Women in Science, Medicine
$ find . -type f | wc -l
70214 ## files
$ find . -type d | wc -l
417 ## subdirectories
여기에는 많은 정답들이 있습니다.여기 또 있어요!
find . -type f | sort | uniq -w 10 -c
여기서, where where에 where.
볼 폴더와 볼 폴더입니다.10
이겁니다.
익스텐트 매핑을 지원하는 회전 디스크 및 파일 시스템 등의 특정 상황에서 재귀 파일 수를 빠르게 하기 위해 ffcnt를 작성했습니다.
보다 훨씬 더 빨리 수 있습니다.ls
아니면요?find
그러나 YMMV.는 YMMV입니다.
디렉토리당 총 파일을 원하는 경우 다음을 수행하십시오.
for d in `find YOUR_SUBDIR_HERE -type d`; do
printf "$d - files > "
find $d -type f | wc -l
done
current dir에 대해 다음을 수행하십시오.
for d in `find . -type d`; do printf "$d - files > "; find $d -type f | wc -l; done;
공백 이름이 긴 경우 다음과 같이 IFS를 변경해야 합니다.
OIFS=$IFS; IFS=$'\n'
for d in `find . -type d`; do printf "$d - files > "; find $d -type f | wc -l; done
IFS=$OIFS
트리 명령을 사용하면 모든 파일과 폴더를 반복적으로 표시할 수 있습니다.또한 출력 마지막 줄에 폴더 및 파일 수를 표시합니다.
$ tree path/to/folder/
path/to/folder/
├── a-first.html
├── b-second.html
├── subfolder
│ ├── readme.html
│ ├── code.cpp
│ └── code.h
└── z-last-file.html
1 directories, 6 files
tree 명령의 마지막 출력 라인에 대해서만 tail 명령을 출력에 사용할 수 있습니다.
$ tree path/to/folder/ | tail -1
1 directories, 6 files
트리 설치를 위해 아래 명령을 사용할 수 있습니다.
$ sudo apt-get install tree
형식에 대한 필터링을 사용하는 이 대체 접근 방식은 사용 가능한 모든 grub 커널 모듈을 카운트합니다.
ls -l /boot/grub/*.mod | wc -l
위의 답변과 의견을 바탕으로 다음과 같은 파일 수 목록을 작성했습니다.특히 @Greg Bell이 제공하는 솔루션과 @Arch Stanton & @Schneams의 의견을 결합한 것입니다.
현재 디렉터리 및 하위 디렉터리에 있는 모든 파일을 계산합니다.
function countit { find . -maxdepth 1000000 -type d -print0 | while IFS= read -r -d '' i ; do file_count=$(find "$i" -type f | wc -l) ; echo "$file_count: $i" ; done }; countit | sort -n -r >file-count.txt
현재 디렉터리 및 하위 디렉터리에 있는 지정된 이름의 모든 파일을 계산합니다.
function countit { find . -maxdepth 1000000 -type d -print0 | while IFS= read -r -d '' i ; do file_count=$(find "$i" -type f | grep <enter_filename_here> | wc -l) ; echo "$file_count: $i" ; done }; countit | sort -n -r >file-with-name-count.txt
-type f | wc -l을 찾습니다.
OR(디렉토리가 현재 디렉토리인 경우)입니다.
. -type f | wc -l을 찾습니다.
이거면 충분히 잘 될 거예요.간단하게요.폴더에 있는 파일 수를 계산하려면 다음과 같이 하십시오.
ls | wc -l
ls -l | grep -e -x -e -dr | wc -l
- 리스트가 길어요
- 파일 및 dir를 필터링합니다.
- 필터링된 줄을 카운트합니다.
언급URL : https://stackoverflow.com/questions/9157138/recursively-counting-files-in-a-linux-directory 입니다.
'programing' 카테고리의 다른 글
골랑은 파이썬처럼 문자열을 곱할 수 있습니까? (0) | 2023.05.05 |
---|---|
Xcode 명령줄 도구를 설치하는 방법 (0) | 2023.05.05 |
마이크로소프트는 어떻습니까?확장입니다.전체 .net 프레임워크에 대해 로깅 작업을 수행하시겠습니까? (0) | 2023.04.25 |
SQL Server에서 이상한 작업 문제가 발생했습니다. -100/-100*10 = 0 (0) | 2023.04.25 |
목록을 python에서 numpy 배열로 저장하는 방법은 무엇입니까? (0) | 2023.04.25 |