2013-11-26 5 views
1

표준화 된 이름 (file1pop.zip, ..., filenpop.zip)의 일련의 압축 파일이 있습니다. 이 파일들 각각에는 popdnamei.asc, i = {1, n}과 관련된 파일이 있습니다. 이 파일들에 대해 두 개의 명령을 실행하고 싶습니다. 그 중 asc 파일을 tif로 변환합니다. 그러나, 나는 bash 스크립트를 작동시킬 수 없다. 나는 bash에서 문자열을 잘리는 방법을 정확히 이해하지 못한다고 생각합니다. 누가 내 실수인지 아는 사람 있습니까?일련의 문자열을 자르기 별표가있는 Bash

################### 
## Choose path 
################### 
cd 
cd path/to/my/directory/with/zipfiles 

################### 
## Unzip, convert to tif and project (WGS84) 
################### 

for x in *pop.zip 
do 
echo $x 
files=${x%%.*} #with this I hope to target the base name "filei", i={1,n} without the ".zip" extension 
mkdir $files 
    unzip -d $files $x 
y=popd*.asc 
if [ -f $files/$y ] #with this I want to run my commands only if the file popdnamei.asc does exist in the file 
then 
     newy=${y%%.*} #extract "popdnamei" without ".asc" extension 
     gdal_translate $files/$y $files/$newy.tif #command 1 
     gdalwarp -s_srs "WGS84" -t_srs "WGS84" $files/$newy.tif $files/$newy_PROJ.tif #command 2 
     cp $files/$newy_PROJ.tif ../Output_Storage/ 
fi 
rm -rf $files 
done  

변수 $y에 문제가 있다고 생각합니다. 프로그램이 실행 중일 때 출력 파일의 이름이 "newypopd*.tif"이고 "completed"라는 이름 (popdnamei.tif)이 아닌 별표가 있는지 확인했습니다. 또한 Output_Storage 디렉토리에 파일이 기록되지 않습니다. 완성을 위해 별표로 정의 된 변수를 잘라내는 데 어려움이 있다고 생각합니다. 나는 그것이 무엇인지 완전히 이해하지 못하고 있습니다. 누군가 나를 도울 수 있습니까? 감사합니다.

답변

2

문제는

y=pop*.asc 

배쉬 파일 이름 확장 기능이 주어진 파일 이름 패턴 일치를 찾을하려고 문이다. 일치하는 항목이 없으면 제공된 패턴이 변수에 지정됩니다. 귀하의 경우, 압축되지 않은 pop * .asc 파일은 $ files 하위 폴더에 있으므로 일치 항목이 없으며 패턴 자체가 변수 'y'에 지정됩니다.

다른 내부 루프를 사용하여 압축 해제 된 파일을 반복하는 것이 좋습니다.

for y in $files/pop*.asc; 
do 
     if [ -f $y ] 
     then 
      newy=${y%%.*} #extract "popdnamei" without ".asc" extension 
      gdal_translate $y $newy.tif #command 1 
      gdalwarp -s_srs "WGS84" -t_srs "WGS84" $newy.tif $newy_PROJ.tif #command 2 
      cp $newy_PROJ.tif ../Output_Storage/ 
     fi 
done 
+0

설명해 주셔서 감사합니다. 오류가 발생했습니다. –