파일 이름이 형식 인 file.00064.name.99999.end
경우 먼저 번호를 제외한 모든 항목을 잘라 내야합니다. 이를 위해 for
루프를 사용합니다 .
우리는 또한 Bash 셸에 10을 사용하도록 지시해야합니다 .Bash 산술은 0으로 시작하는 숫자를 8로 처리하므로 문제가 발생합니다.
파일을 포함하는 디렉토리에서 시작할 때 스크립트로 사용하려면 다음을 사용하십시오.
#!/bin/bash
for f in ./*
do
if [[ -f "$f" ]]; then
file="${f%.*}"
if [[ $((10#${file##*.} % 12)) -ne 0 ]]; then
rm "$f"
fi
else
echo "$f is not a file, skipping."
fi
done
또는이 매우 추한 명령을 사용하여 동일한 작업을 수행 할 수 있습니다.
for f in ./* ; do if [[ -f "$f" ]]; then file="${f%.*}"; if [[ $((10#${file##*.} % 12)) -ne 0 ]]; then rm "$f"; fi; else echo "$f is not a file, skipping."; fi; done
모든 부분을 설명하려면 :
for f in ./*
현재 디렉토리의 모든 것을 의미합니다. do .... 이렇게하면 각 파일 또는 디렉토리를 변수 $ f로 설정합니다.
if [[ -f "$f" ]]
찾은 항목이 파일인지 확인합니다. 그렇지 않으면 해당 echo "$f is not...
부분으로 건너 뛰므로 실수로 디렉토리를 삭제하지 않습니다.
file="${f%.*}"
$ file 변수를 파일 이름으로 마지막 뒤에 오는 모든 것을 잘라냅니다 .
.
if [[ $((10#${file##*.} % 12)) -eq 0 ]]
기본 산술이 시작되는 위치입니다. 확장명을 사용하지 않으면 파일 이름 ${file##*.}
의 마지막 부분보다 먼저 모든 항목을 다듬습니다 .
. $(( $num % $num2 ))
는 Bash 산술이 모듈로 연산을 사용하는 구문이며 10#
, 시작시 Bash 가베 이스 10을 사용하여 성가신 선행 0을 처리하도록 지시합니다. $((10#${file##*.} % 12))
그런 다음 파일 이름 번호의 나머지를 12로 나눕니다. -ne 0
나머지가 "같지 않은"지 여부를 확인합니다.
- 나머지가 0이 아닌 경우, 파일이 함께 삭제
rm
명령, 당신은 대체 할 수 rm
와 함께 echo
먼저 예상되는 파일을 삭제할 수 있는지 확인하려면 다음을 실행하는 경우.
이 솔루션은 재귀 적이 지 않으므로 현재 디렉토리의 파일 만 처리하며 하위 디렉토리로 이동하지 않습니다.
디렉토리에 대해 경고 if
하는 echo
명령 이있는 명령문 은 디렉토리 rm
자체에 대해 불평하고 삭제 하지 않기 때문에 실제로는 필요 하지 않습니다.
#!/bin/bash
for f in ./*
do
file="${f%.*}"
if [[ $((10#${file##*.} % 12)) -ne 0 ]]; then
rm "$f"
fi
done
또는
for f in ./* ; do file="${f%.*}"; if [[ $((10#${file##*.} % 12)) -ne 0 ]]; then rm "$f"; fi; done
제대로 작동합니다.