주어진 디렉터리에 있는 파일, 디렉터리 등의 수를 계산하고 화면에 출력 형식을 지정합니다.

주어진 디렉터리에 있는 파일, 디렉터리 등의 수를 계산하고 화면에 출력 형식을 지정합니다.

방금 스크립팅 과정을 시작했는데 도움이 필요합니다. 나는 주어진 디렉터리에 있는 모든 파일과 디렉터리의 파일 이름을 확인하고 모든 파일, 하위 디렉터리, 심볼릭 링크, 이전 파일, 그래픽 파일, tmp 파일, exe 파일 및 각 파일의 개수를 누적하는 스크립트를 작성 중입니다. 이 디렉토리의 바이트 수입니다.

출력 형식은 다음과 같이 지정되어야 합니다.

  • 디렉토리 n, nnn, nnn
  • 파일 n, nnn, nnn
  • 등...

스크립트를 실행하면 모든 카운트 항목이 0을 반환하므로 아무것도 계산되지 않는 것 같습니다. 또한 숫자를 쉼표로 형식화하는 데 문제가 있습니다. $1은 스크립트를 실행할 때 사용자가 입력할 검색 디렉터리입니다(예: ./srpt /etc). 검색을 실행하기 위해 find 명령과 printf를 사용하여 출력 형식을 지정하고 출력을 wc로 파이프하여 줄 수를 계산했습니다. 나는 이것이 파일 이름에 단 한 줄만 부여하는 파일 수를 줄 것이라고 생각했습니다. 이를 수행하는 방법은 아마도 수십억 가지가 있을 것이며 이 방법이 가장 우아하지는 않을 수도 있지만 누구라도 의견을 제시해 주시면 감사하겠습니다.

if [ -d "$1" ]; then
        directories=$(find "$1" -type d -printf "%'d" | wc -l)
        files=$(find "$1" -type f -printf "%'d" | wc -l)
        sym=$(find "$1" -type l -printf "%'d" | wc -l)

등...

#Printing the output to the terminal
      echo "Directories" $directories
      echo "Files" $files
      echo "Sym links" $sym
      exit 0
else
        echo "[ERROR]: need path to perform search"
        exit 1
fi

내 결과:

Directories 0
Files 0
Sym Links 0

답변1

명령을 다음 형식으로 변경해야 합니다.

directories=$(printf "%'d\n" $(find "$1" -type f | wc -l))

printf현재 로캘의 천 단위 구분 기호를 사용하세요. 구분 기호는 쉼표, 점 또는 아무것도 아닐 수 있습니다. 쉼표를 강제로 적용하려면 로케일을 변경할 수 있습니다.

또는 다음과 같은 방법으로 수행할 수 있습니다.

if [ -d "$1" ]; then
    directories=$(find "$1" -type d | wc -l)
    files=$(find "$1" -type f | wc -l)
    sym=$(find "$1" -type l | wc -l)

그리고 echo로 교체printf

#Printing the output to the terminal

  printf "%s %'d\n" "Directories" $directories
  printf "%s %'d\n" "Files" $files
  printf "%s %'d\n" "Sym links" $sym

printf이 오류는 두 가지 다른 명령(bash 및 find ) 을 혼동했기 때문에 발생합니다 -printf.

조회 -printf형식이 "%'d"잘못되었습니다. %d디렉터리 트리의 파일 깊이를 나타내는 작은따옴표는 허용되지 않습니다 . 다음을 입력하여 -printf모든 옵션을 찾을 수 있습니다 .man find/printf format

그런데, 두 가지 모두 (bash와 find) \n에 추가해야 합니다 . 그렇지 않으면 모든 출력을 한 줄에 인쇄합니다.printf"%d\n"

답변2

-printf "%'d"여기서는 아무 작업도 수행되지 않으므로 개수 결과가 0이 되며 이를 변경하는 데 사용해야 합니다 -printf "%p\n".

관련 정보