매개변수로 전달된 파일의 크기를 메가바이트 수와 어떻게 비교합니까?

매개변수로 전달된 파일의 크기를 메가바이트 수와 어떻게 비교합니까?

파일이나 디렉터리를 매개 변수로 사용하는 스크립트가 있고 파일을 메가바이트 단위로 비교하여 파일이 1MB보다 크거나 작거나 같은지 확인하려고 합니다.

내 생각에 대답은 다음과 같다.

#!/bin/bash

FILE=$1 
export FILE1 

if [ -f$1 ];

then  
        echo "Hello world!" 

fi 

  if [ $# -lt 1 ]; then 
       echo "This file is less than 1 megabyte"
fi

이 파일을 매개변수로 전달하여 1MB 미만인지 확인하려고 합니다. 이제 $# -lt 1이 실제로 1MB보다 작은지 아니면 정수 1보다 작은지 알아야 합니다.

답변1

일부 댓글 작성자/답변자가 말했듯이 스크립트가 들어오는 파일의 크기를 가져오지 못합니다. 메가바이트와 비교하려면 이 작업을 수행해야 합니다.

한 가지 옵션은 stat다음 명령입니다.

bytes=$(stat -c %s filename_here)

또 다른 옵션은 wc다음 명령입니다.

bytes=$(wc -c < filename_here)

다음으로 이를 1MB와 비교하려고 합니다. bash 산술은 정수로 제한되므로 소수와 비교하려는 시도는 실패할 수 있습니다. 대신 1048576바이트와 비교하세요.

요약하면 다음과 같습니다.

#!/bin/bash

if [ -f "$1" ];
then  
  echo "Hello world!"
  bytes=$(stat -c %s "$1")
  if [ "$bytes" -lt 1048576 ]; then 
    echo "This file is less than 1 megabyte"
  fi
fi

크기 수를 첫 번째 if명령문으로 옮겼습니다. 존재하지 않는 파일의 크기를 확인하는 것은 의미가 없습니다. 또한 매개변수로 다른 작업을 수행하지 않는 한 다른 변수 이름을 사용할 필요가 없으므로 그냥 $1.

답변2

스크립트에 논리 및 구문 오류가 있습니다.

  • 할당 FILE하고 내보냅니다 FILE1(해롭지는 않지만 의미가 없습니다).
  • 더 이상 사용하지도 사용 FILE하지도 FILE1않습니다(동일).
  • "조건 마스터"와 파일 이름 사이에 공백이 필요합니다.[ -f$1 ]
  • $#파일 크기가 아닌 스크립트의 매개변수 수를 생성합니다 (Filipe Brandenburger가 이미 지적했듯이).
  • stat귀하에게 제공되는 정보 외에도 대체 정보 소스가 필요합니다 .du -b file

관련 정보