2015-01-28 3 views
0

파일을 일괄 처리하고 정보를 추출하는 방법을 배우려고합니다. 나는 시범 파일을 만들고 이름을 편집하려고 시도했다. 검색을 시도했지만 어디서나 문제를 찾을 수 없습니다. 이미 답변 한 경우 해당 링크로 이동하게되어 기쁩니다.'이상한 곳에서 멈췄다'파일을 일괄 편집

#!/bin/bash 

mkdir -p ./trialscript 
echo $1 
i=1 
while [ $i -le $1 ] 
do 
    touch ./trialscript/testfile$i.dat 
    i=$(($i+1)) 
done 

for f in ./trialscript/*.dat 
do 
    echo $f 
    mv "$f" "$fhello.dat" 
done 

이 작동하지 않는 것, 내가 에코 출력이 같이 있기 때문에 그것은 생각 :

4 
./trialscript/testfile1.dat 
./trialscript/testfile2.dat 
./trialscript/testfile3.dat 
./trialscript/testfile4.dat 

난 그냥 파일 이름이 필요

그래서, 나는 다음과 같은 코드를 작성 'f'가 아닌 전체 경로를 입력 한 다음 이름을 바꿉니다. 누군가 내 코드에서 무엇이 잘못 되었는가를 제안 할 수 있으며 내가하고있는 일을 수행하는 올바른 방법은 무엇입니까?

답변

1

파일을 이동하려면 경로도 사용해야합니다. 그렇지 않으면 mv은 경로를 찾아야합니다.

mv 명령의 대상 사양은 더 문제가 있습니다. 당신은 실제로 "라고 $fhello 변수 플러스 문자열 .dat의 내용을"의미

"$fhello.dat" 

을 사용하고 있습니다. 어떻게 불량 쉘이 솔기가 어디 있는지 알고 있어야합니까?

"${f}hello.dat" 

을 사용하십시오.

또한 문자열 부분을 추출하려면 man bash의 매개 변수 확장을 참조하십시오. ${f%/*}을 사용하여 경로 만 가져 오거나 ${f##*/} 만 파일 이름을 가져올 수 있습니다.