다음과 같은 파일이 여러 개 있습니다.
2020.001.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac
2020.001.03.04.pcc1_TBTZ_TBTZ_1.0-3.0.sac
2020.002.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac
2020.003.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac
2020.004.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac
2020.004.05.06.pcc1_TBTZ_TBTZ_1.0-3.0.sac
2020.005.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac
2020.006.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac
...
2020.366.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac
파일은 year.day.hour1.hour2...중요한 매개 변수는 연도와 일입니다. 날짜 범위는 001부터 366(또는 365)까지입니다.
내가 원하는 것은 내 파일(폴더와 파일)을 이렇게 정리하는 것이다. 따라서 폴더를 만들고 해당 파일을 폴더로 이동하십시오.
2020.001.003 - 2020.001.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac
2020.001.03.04.pcc1_TBTZ_TBTZ_1.0-3.0.sac
2020.002.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac
2020.003.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac
2020.004.006 - 2020.004.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac
2020.004.05.06.pcc1_TBTZ_TBTZ_1.0-3.0.sac
2020.005.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac
2020.006.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac
366일째 파일이 완료될 때까지 계속됩니다.
내가 한 일(원하는 대로 작동하지 않음):
for file in *.sac
do
year=`echo "$file" | awk -F"." '{print $1}'`
day=`echo "$file" | awk -F"." '{print $2}'`
dayi=$day
dayf="366"
#
# Moving every three day files
delta=2
x1=$dayi
x2=$(echo "$x1+$delta" | bc)
if [ $x1 -lt $x2 ]
then
echo $x1 $x2
dir=$(echo "$year"."$x1"."$x2")
mkdir $dir
x1=$(( x1+3))
x2=$(( x1+delta))
fi
done
결과적으로 코드는 다음과 같은 폴더를 생성합니다.
2020.001.3
2020.002.4
2020.003.5
...
기본적으로 필요하지 않은 폴더를 생성하고 있습니다. 또한 파일을 폴더로 이동하는 방법을 아직 모르겠습니다.
당신의 도움을 주셔서 감사합니다.
답변1
bash의 기능을 사용하면 모든 것이 더 간단해집니다.
#!/bin/bash
for file in *.sac
do
year=${file:0:4}
day=${file:5:3}
range_start=$(( (($day-1)/3)*3+1 ))
range_end=$(( $range_start+2 ))
ndir=$(printf "%04d.%03d.%03d" $year $range_start $range_end)
mkdir -p archive/$ndir
mv $file archive/$ndir/
done
답변2
에서는 일괄 이름 바꾸기를 사용하여 이 작업을 수행 zsh
할 수 있습니다 zmv
.
autoload -Uz zmv
mkmv() { mkdir -p -- $2:h && mv -- "$@"; }
zmv -n -P mkmv '(<->.)(<1-366>).*.sac' \
'$1${(l[3][0])$(( start = ($2 - 1) / 3 * 3 + 1 ))}.${(l[3][0])$(( start + 2 ))}/$f'
( -n
만족하면 삭제(테스트 실행)).
이는 다음을 제공합니다:
mkmv 2020.001.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac 2020.001.003/2020.001.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac
mkmv 2020.001.03.04.pcc1_TBTZ_TBTZ_1.0-3.0.sac 2020.001.003/2020.001.03.04.pcc1_TBTZ_TBTZ_1.0-3.0.sac
mkmv 2020.002.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac 2020.001.003/2020.002.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac
mkmv 2020.003.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac 2020.001.003/2020.003.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac
mkmv 2020.004.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac 2020.004.006/2020.004.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac
mkmv 2020.004.05.06.pcc1_TBTZ_TBTZ_1.0-3.0.sac 2020.004.006/2020.004.05.06.pcc1_TBTZ_TBTZ_1.0-3.0.sac
mkmv 2020.005.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac 2020.004.006/2020.005.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac
mkmv 2020.006.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac 2020.004.006/2020.006.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac
mkmv 2020.366.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac 2020.364.366/2020.366.00.01.pcc1_TBTZ_TBTZ_1.0-3.0.sac