디렉토리의 모든 파일을 반복적으로 계산합니다 [중복] 수 있습니까? Linux 상자에 정말

가능한 중복 :
Linux를 사용하여 드라이브의 폴더 수를 어떻게 계산할 수 있습니까?

Linux 상자에 정말 깊은 디렉토리 트리가 있습니다. 모든 하위 디렉토리를 포함하여 해당 경로의 모든 파일을 계산하고 싶습니다.

예를 들어이 디렉토리 트리에서

/home/blue
/home/red
/home/dir/green
/home/dir/yellow
/home/otherDir/

에 전달하면 /home네 개의 파일을 반환하고 싶습니다. 또는 네 개의 파일과 두 개의 디렉토리를 반환하는 경우 보너스 포인트입니다. 기본적으로 Windows에서 폴더를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하고 해당 폴더에 얼마나 많은 파일 / 폴더가 있는지 확인하는 것과 같습니다.

가장 쉬운 방법은 무엇입니까? 필자가 작성한 Python 스크립트와 관련된 솔루션이 있지만 왜 이렇게 실행하기가 쉽지 ls | wc않습니까?



답변

find . -type f | wc -l

설명 : 이 ( . ) 디렉토리 및 모든 서브 디렉토리에서
find . -type f모든 파일 ( -type f )을 찾으면 파일 이름이 한 줄에 하나씩 표준 출력으로 인쇄됩니다.

그런 다음 파이프 | wc(단어 수)이 -l옵션은 입력 행을 계산에 화장실 알려줍니다.

그들은 함께 모든 파일을 계산합니다.


답변

위의 답변은 이미 질문에 대답하지만 다음과 같이 인수없이 찾기를 사용하면 (검색을 수행하려는 폴더 제외) 추가합니다.

find . | wc -l

검색은 훨씬 더 빠르거나 거의 순식간에 이루어 지거나 적어도 나를 위해 수행됩니다. type 절은 각 이름에 대해 stat () 시스템 호출을 실행하여 유형을 확인해야하기 때문에 생략합니다.

이것은 파일 대신 파일 수와 폴더 수를 반환하는 차이가 있지만 적어도 필자는 파일을 복사하고 압축하는 데 많은 양의 파일이있는 폴더를 찾기 위해 주로 이것을 사용하기 때문에 충분합니다. 폴더 수를 계산하면 여전히 대부분의 파일이있는 폴더를 찾을 수 있습니다. 정밀도보다 속도가 더 필요합니다.


답변

파일의 경우 :

find -type f | wc -l

디렉토리의 경우 :

find -mindepth 1 -type d | wc -l

둘 다 현재 작업 디렉토리에서 작동합니다.


답변

bash 4 이상

shopt -s globstar
for file in **/*
do
  if [ -d "$file" ];then
    ((d++))
  elif [ -f "$file" ];then
     ((f++))
  fi
done
echo "number of files: $f"
echo "number of dirs: $d"

파일과 디렉토리를 검색하려면 find를 두 번 호출 할 필요가 없습니다.


답변

당신이 dirs의 수를 원하는 경우 허용되는 답변에 약간의 업데이트

find $DIR -exec stat -c '%F' {} \; | sort | uniq -c | sort -rn