디렉토리의 파일을 에코/인쇄하고, 파일 크기를 에코하고, 파일 수를 에코합니다.

디렉토리의 파일을 에코/인쇄하고, 파일 크기를 에코하고, 파일 수를 에코합니다.

도와주세요. 저는 학생이고 연습하고 배우려고 온라인에서 이 질문을 찾았습니다.

나는 주어진 디렉토리의 모든 항목을 에코하는 프로그램을 만들고 있습니다. 디렉토리의 항목이 파일인 경우 크기가 표시됩니다. 항목이 디렉터리인 경우 해당 디렉터리에 몇 개의 항목이 있는지 표시됩니다. 아래 내 프로그램은 특정 디렉토리의 파일을 에코합니다. 내 질문은 파일 크기를 에코하고 디렉터리의 항목 수를 에코하는 방법입니다. 내 프로그램은 다음과 같습니다

감사합니다!

#! /bin/bash
# Files Directory
read -p "Enter a Directory or File: " entry
target="$entry"
let count=0
for f in "$target"/*
do 
echo $(basename $f)
let count=count+1
done
echo "Files in the Directory: $count"
exit 0

답변1

학습 중이므로 완전한 스크립트가 아닌 문제와 관련된 몇 가지 지침이 여기에 있습니다.

Linux 시스템에서 파일 크기를 얻는 방법은 여러 가지가 있습니다.stat유용바이트를 직접 요청할 수 있으므로 좋은 선택입니다.

bytes=$(stat -c %s -- "$f")

또 다른 옵션은화장실 시설:

bytes=$(wc -c < "$f")

파일을 리디렉션하고 싶다는 점에 유의하세요.입력하다 wc반직관적입니다 wc -c "$f". 후자 형식은 파일 이름도 출력하는 반면, 전자(파일 이름을 모르기 때문에)는 바이트 수만 출력하기 때문입니다.

주어진 파일이 일반 파일인지 디렉토리인지 테스트하기 위한 일반적인 테스트는 다음과 같습니다.

if [ -d "$f" ]
then
  echo It is a directory
else
  echo It is not a directory
fi

디렉터리에 있는 (숨겨지지 않은) 파일 수를 계산하려면 다음과 같은 몇 가지 옵션이 있습니다.

  • POSIX 지정 set유틸리티를 사용하십시오.

    set -- /path/to/dir/*;  echo "$#"
    
  • 배열 사용(bash 태그를 지정했기 때문에):

    files=( /path/to/dir/* )
    echo "There are ${#files[@]} files in there"
    

특정 디렉터리에 있는 "파일"(파일 및 디렉터리) 수를 계산합니다. 대부분의 쉘의 기본 동작은 다음과 같습니다.소홀히 하다.bashrc예를 들어 전역을 확장할 때 도트 파일을 *실행하거나 bash를 shopt -s dotglob사용하여 이를 조정할 수 있습니다 .shopt -u dotglobshopt dotglob

관련 정보