그래서 입력 디렉터리, 출력 디렉터리 및 파일 목록이 있습니다.
#!/bin/bash ## shell type
dir_in=('/Users/dossa013/data/inland-data/input/')
dir_out=('/Volumes/Macintosh HD 2/data/cmip5/cru/')
files=('/Users/dossa013/data/inland-data/input/*ts*')
"files" 변수에는 다음 내용이 포함됩니다.
cld.cru_ts3.22.1901.2013.nc
prec.cru_ts3.22.1901.2013.nc
rh.cru_ts3.22.1901.2013.nc
temp.cru_ts3.22.1901.2013.nc
trange.cru_ts3.22.1901.2013.nc
wetd.cru_ts3.22.1901.2013.nc
내가 해야 할 일은 입력 파일과 출력 파일을 인수로 사용하는 명령을 실행하는 것입니다. 제 경우에는 입력 파일이 출력 파일 디렉터리와 다른 디렉터리에 있었습니다.
참고 사항: 출력 파일을 지정할 때 원본 파일 이름 끝과 확장자 사이에 "cropped"라는 단어를 추가하고 싶습니다.
이 루프는 작동하지 않습니다:
for f in ${files[@]}; do ## loop over files
echo cdo sellonlatbox "${dir_in}"${f##*/} "${dir_out}"$(printf '%s\n' "${f##*/.nc}_cropped.nc")
done
이상적으로 결과는 다음과 같습니다.
cdo sellonlatbox /Users/dossa013/data/inland-data/input/prec.cru_ts3.22.1901.2013.nc /Volumes/Macintosh HD 2/data/cmip5/cru/prec.cru_ts3.22.1901.2013_cropped.nc
내 실수는 어디에 있습니까?
답변1
다음은 예제 파일 이름 중 하나를 사용한 예입니다(단, 모든 파일 확장자와 함께 작동함).
originalfilename=rh.cru_ts3.22.1901.2013.nc
tmpfn=${originalfilename%.*}
extfn=${originalfilename##*.}
newfilename=${tmpfn}_cropped.${extfn}
printf "%s\n" "${originalfilename}" "${newfilename}"
산출:
rh.cru_ts3.22.1901.2013.nc
rh.cru_ts3.22.1901.2013_cropped.nc
답변2
basename
다음을 사용하여 확장을 제거한 후 새 확장을 추가 할 수 있습니다 .
croppedname=$(basename $originalname .nc)_cropped.nc
basename
디렉터리도 제거되므로 앞에 대상 디렉터리를 추가할 수 있습니다.