Centos7에서 지정된 바이트 수보다 많은 파일을 삭제하는 스크립트

Centos7에서 지정된 바이트 수보다 많은 파일을 삭제하는 스크립트

파일을 삭제하려면 스크립트가 필요합니다. 파일 이름을 지정했고 파일 크기가 지정된 크기보다 크면 삭제해야 하며 그렇지 않으면 아무 일도 일어나지 않습니다.

이런거 해봤는데 사이즈 비교가 잘 안되네요

se=$1 
file1=$2 file2=$3 
wc -c $2 $3 
for file in $2 $3
do 
fi [ $2 -gt $1]
then  rm $1
fi
done

답변1

스크립트가 필요하지 않습니다. find필요한 작업을 정확하게 수행하는 표준 명령줄 도구가 있습니다 . 예를 들어, /tmp1GB보다 큰 모든 파일을 삭제하려면 먼저 안전을 위해 다음을 실행합니다.

find /tmp -size +1G

그런 다음 필요하지 않은 항목은 삭제하지 않을 것이라고 확신하면 다음을 수행하세요.

find /tmp -size +1G -delete

귀하의 질문에서 쉘 변수를 인용하지 않는다는 일반적인 실수를 범하므로 파일에 공백이 포함되어 있으면 바람직하지 않은 결과를 얻게 됩니다. 이는 이 find명령과 자체 내부 명령을 사용하여 방지할 수 있습니다.-delete

평소와 마찬가지로 이 man페이지에서는 이 매우 강력한 명령에 대한 완전한 문서를 제공합니다.

기본적으로 이 명령은 지정된 경로의 모든 하위 디렉터리에서 작동합니다. 작업을 제한하기 위해 옵션을 사용할 수 있습니다 -maxdepth.

답변2

스크립트에 몇 가지 오류나 불일치가 있습니다.

  1. 일부 변수를 선언했지만 사용하지 않았습니다.
  2. 를 사용 wc -c $2 $3하지만 결과를 변수에 할당하지 않으므로 결과가 터미널에만 인쇄되고 스크립트에서는 사용할 수 없습니다.
  3. 당신이 썼어요 fi [ $2 -gt $1]. 첫 번째 단어는 if, 아니오 여야 합니다 fi. 패턴은 입니다 if [condition]; then [do something]; fi.
  4. 이 답변의 2번 항목으로 인해 을 써도 if [ $2 -gt $1]; then파일 이름만 있으므로 크기를 비교하는 $2것이 $1아니라 이름을 비교하는 것입니다.

내 생각에는 우리가 스크립트를 작성하지 않고 문제를 해결해 주는 bash 스크립팅 튜토리얼을 시도해 보시는 것이 좋을 것 같습니다. 다음은 몇 가지 유용한 링크입니다:초보자를 위한 bash 스크립팅 튜토리얼그리고Bash 스크립팅 튜토리얼

관련 정보