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