그래서 날짜 형식의 파일 이름 일부를 가져와 해당 숫자가 11보다 큰지 확인하는 코드가 있습니다. 모든 파일은 동일한 명명 원칙을 따르며 이름과 날짜만 다릅니다. -> 예:
Huistaak1-HelloWorld_Jonas.De Preter.s.ua_poging_2019-11-12 (참고: 이 파일 이름은 디렉터리입니다)
다음은 마지막 2개 숫자를 가져와 11과 비교하고 숫자가 더 큰 경우 디렉터리를 만드는 코드입니다.
for d in ./*/*/; do
[[ ! -d "$d" ]] && continue
char=${d: -3}
(( ${char%/} > 11 )) &&
mkdir -p "$d"late_inzending
done
내가 겪고 있는 문제는 날짜가 10보다 작을 때 09와 11을 비교한다는 것입니다. 이로 인해 오류가 발생합니다.
09 > 11 --> 'utf-8' 코덱은 위치 679의 바이트 0xc8을 디코딩할 수 없습니다: 잘못된 연속 바이트
답변1
sed를 사용하여 간단히 수정했습니다.
#the string which I'm working with:
#Huistaak1-HelloWorld_Jolien.Peters.s.ua_poging_2019-11-12
for d in ./*/*/; do
char=${d: -3} #:Variable to get the last 2 numbers in this string(12/)
x=${char%/} #:Variable to remove the invisible "/"
y=$(echo $x | sed 's/^0*//')#:Incase there are leading zeros remove them
echo $y
(( "$y" > 11 )) && #Compare the numbers and if $y is bigger then make new directory
mkdir -p "$d"late_inzending
done