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