수년에 걸쳐 쌓여있는 모든 종류의 쓰레기가있는 하드 드라이브를 청소하려고합니다. du
디스크 사용량을 줄이는 데 도움이되었지만 전체 크기가 아니라 전체 파일과 디렉토리의 수가 많기 때문에 모든 것이 여전히 엉망입니다.
du
파일 크기를 세지 않고 파일과 디렉토리 수를 세는 것과 같은 것을 할 수있는 방법이 있습니까? 예를 들어, 파일은 1이고 디렉토리는 그 안에있는 파일 / 디렉토리의 재귀 수 + 1입니다.
편집 : 나는 더 분명했다. 나는에있는 파일 / 디렉토리의 총 수를 알뿐만 아니라 싶습니다 /
뿐만 아니라에서 /home
, /usr
등, 그 하위 디렉토리에 재귀처럼이 du
크기 않습니다.
답변
나는 발견했다 du --inodes
유용하지만 버전 확실하지 않다 du
가 필요합니다. 우분투 17.10에서는 다음이 작동합니다.
du --inodes # all files and subdirectories
du --inodes -s # summary
du --inodes -d 2 # depth 2 at most
와 결합 | sort -nr
포함하는 아이 노드의 수에 의해 정렬 내림차순으로.
답변
가장 쉬운 방법은 find /path/to/search -ls | wc -l
찾기는 모든 파일과 폴더를 걸을 때 사용됩니다.
-ls
모든 이름을 나열 (인쇄)합니다. 이것은 기본값이며, 그대로두면 거의 모든 시스템에서 동일하게 작동합니다. (거의 일부는 기본값이 다를 수 있으므로) 이것을 명시 적으로 사용하는 것은 좋은 습관입니다.
find /path/to/search -ls
파트를 사용하면 모든 파일과 디렉토리를 화면에 인쇄합니다.
wc
단어 개수입니다. 이 -l
옵션은 줄 수를 계산하도록 지시합니다.
여러 가지 방법으로 사용할 수 있습니다. 예 :
- 화장실 테스트 파일
- 고양이 테스트 파일 | 화장실
첫 번째 옵션을 사용하면 wc는 파일을 열고 해당 파일의 줄, 단어 및 문자 수를 계산할 수 있습니다. 두 번째 옵션은 파일 이름없이 동일하지만 stdin에서 읽습니다.
파이프와 명령을 결합 할 수 있습니다 |
. 첫 번째 명령의 출력은 두 번째 명령의 입력으로 파이프됩니다. 따라서 find /path/to/search -ls | wc -l
find를 사용하여 모든 파일과 디렉토리를 나열하고 출력을 wc에 공급합니다. 그런 다음 Wc는 줄 수를 계산합니다.
(또 다른 대안은`ls | wc ‘였지만 찾기는 훨씬 더 유연하고 배우기 좋은 도구입니다.)
[댓글 후 편집]
찾기와 exec를 결합하는 것이 유용 할 수 있습니다.
예를 들어 find / -type d ! \( -path proc -o -path dev -o -path .snap \) -maxdepth 1 -exec echo starting a find to count to files in in {} \;
/에있는 모든 디렉토리를 나열하고 검색하지 않으려는 디렉토리를 표시하십시오. 각각에 대해 이전 명령을 트리거하여 /의 폴더 당 파일 수를 산출 할 수 있습니다.
하나:
- 이것은 GNU 특정 확장자 인 -maxdepth를 사용합니다.
Linux에서는 작동하지만 유닉스와는 달리 작동하지 않습니다. - 실제로 각 하위 디렉토리마다 여러 개의 fo 파일을 원할 것으로 생각됩니다.
답변
다음 PHP 스크립트가 트릭을 수행합니다.
#!/usr/bin/php
<?php
function do_scan($dir, $dev) {
$total = 1;
if (\filetype($dir) === 'dir' && \lstat($dir)['dev'] == $dev) {
foreach (\scandir($dir) as $file) {
if ($file !== '.' && $file !== '..') {
$total += do_scan($dir . \DIRECTORY_SEPARATOR . $file, $dev);
}
}
print "$total\t$dir\n";
}
return $total;
};
foreach (\array_slice($argv, 1) as $arg) {
do_scan($arg, \lstat($arg)['dev']);
}
파일 (예 : ” treesize
“)에 chmod +x
넣고로 실행하십시오 ./treesize . | sort -rn | less
.
답변
ncdu 는 이것에 좋습니다!
매뉴얼 페이지에서 디렉토리 당 개수와 개수별로 순서를 표시 할 수 있습니다.
[...]
KEYS
C Order by number of items (press again for descending order)
[...]
c Toggle display of child item counts.
예를 들면 다음과 같습니다.
답변
dirs와 파일이로 구분된다는 사실을 이용하십시오 /
. 이 스크립트는 사용자의 기준에 부합하지만 완전한 솔루션을 제공합니다. 또한 locate를 사용하여 파일을 색인화하는 것을 고려해야합니다.
geee: /R/tb/tmp
$ find 2>/dev/null | awk -F/ -f filez | sort -n
files: 57
3 imagemagick
7 portage
10 colemak-1.0
25 minpro.com
42 monolith
80 QuadTree
117 themh
139 skyrim.stings
185 security-howto
292 ~t
329 skyrim
545 HISTORY
705 minpro.com-original
1499 transmission-2.77
23539 ugent-settings
>
$ cat filez
{
a[$2]++; # $1= folder, $2 = everything inside folder.
}
END {
for (i in a) {
if (a[i]==1) {files++;}
else { printf "%d\t%s\n", a[i], i; }
}
print "files:\t" files
}
>
$ time locate / | awk -F/ -f /R/tb/tmp/filez | sort -n
files: 13
2
2 .fluxbox
10 M
11 BIN
120 bin
216 sbin
234 boot
374 R
854 dev
1351 lib
2018 etc
9274 media
30321 opt
56516 home
93625 var
222821 usr
351367 mnt
time: Real 0m17.4s User 0m4.1s System 0m3.1s
답변
다음 은 유닉스 및 리눅스 의 게시물에서 영감을 얻은 bash를 사용하는 솔루션입니다 .
find . -type d | while read -r dir; do \
printf "%s:\t" "$dir"; find "$dir" -type f | wc -l; done
와 같은 세부 정보를보고 싶지 않은 폴더가 .git
있는 경우을 사용하여 목록에서 해당 폴더를 제외 할 수 있습니다 grep
.
find . -type d |grep -v "./.git/.*" | while read -r dir; do \
printf "%s:\t" "$dir"; find "$dir" -type f | wc -l; done