for 루프의 파일 크기

for 루프의 파일 크기

for 루프에서 stat를 사용하여 폴더에 있는 각 파일의 파일 크기를 얻으려고 합니다. 다음이 오류가 발생하는 이유를 알고 있지만 아직 수정할 지식이 부족합니다.

#!/bin/bash

for file in .* *; do
     size=$(stat --printf="%s")
     echo $size
done

그러나 stat에 파일 이름이 없기 때문에 논리적으로 다음 오류가 발생합니다.

stat: missing operand
Try 'stat --help' for more information.

stat가 각 파일의 파일 이름을 가져오도록 하려면 어떻게 해야 합니까(파일만) 폴더에?

편집: Powershell 배경에서 "$_" 변수를 사용합니다. Unix 쉘도 유사한 변수를 제공합니까?

답변1

stat오류를 일으킨 인수(파일 이름)를 제공하지 않았습니다 .

변수를 사용하여 file각 파일 이름을 저장하고 이를 반복하지만 파일 이름을 매개변수로 제공하지 않습니다 stat. 즉, $file(변수의 값 file)을 에 전달해야 합니다 stat.

한 줄로 모든 작업을 수행할 수도 있습니다.

for file in .* *; do stat -c '%s-%n' "$file" ; done

printf출력 형식을 주장하려면 다음이 추가로 필요합니다 \n.

for file in .* *; do stat --printf='%s-%n\n' "$file" ; done

%n또한 표시되는 파일의 크기를 확인할 수 있도록 여기에 뭔가를 추가했습니다 .

편집하다:

디렉터리를 제외한 파일에서만 이 명령을 실행하려면 추가 검사를 사용해야 합니다. 여기서는 test( [) 내장 함수를 사용하여 file일반 파일인지 확인하고, 그렇다면 종료 코드 0을 반환한 다음 [ -f "$file" ]해당 파일에서 ()를 &&실행합니다 .stat

for file in .* *; do [ -f "$file" ] && stat -c '%s-%n' "$file" ; done

관련 정보