2012-10-17 3 views
0

bash를 사용하여 파일 폴더를 반복하고 있지만 앞의 경로를 잘라야합니다. 예를 들어,이 '/ temp/test/filename'이 있으면 '/ temp/test /'를 자르고 변수에 파일 이름을 저장하여 파일 이름과 함께 로그를 쓸 수 있습니다.내용이 bash에서 'cut'된 후에 변수를 지정하십시오.

아무도 도와 줄 수 있습니까? 문제는 변수 temp가 항상 비어 있다는 것입니다. 그 시도

#!/bin/bash 

for file in /temp/test/* 
do 
    if [[ ! -f "$file" ]] 
    then 
     continue 
    fi 

    temp="$file"|cut -d'/' -f3 

    $file > /var/log/$temp$(date +%Y%m%d%H%M%S).log 
done 

exit 
+0

질문과 관련 없음 :'[[-f "$ file"]]'를 사용하고 TRUE 인 경우에만 명령을 실행할 수 있으므로'continue'를 사용하지 않아도됩니다. – doubleDown

답변

1

:

$ x=/temp/test/filename 
$ echo ${x##*/} 
filename 

또 다른 해결책은 basename을 사용하는 것입니다 : 여기

내 bash는 코드

$ basename /temp/test/filename 
filename 

첫 번째 솔루션은 parameter expansion이며, 그것은이다 bash 내장되어 있으므로 성능이 향상됩니다.

고객님의 전화 번호는 temp="$file"|cut -d'/' -f3입니다. 당신이 변수에 명령의 출력을 저장할 때

  • , 당신은 당신이 here-string (<<<) 또는 사용하여 명령의 STDIN에 값을 전달해야 var=$(command)
  • 해야 echo value | command
  • 마지막으로

, 사용할 줄 경우 cut :

$ temp=$(cut -d/ -f4 <<< /temp/test/filename) 
$ echo $temp 
filename 
+0

아직도 내가 어떻게 분리하는지 보지 못합니다. 당신이 경로명을 분리하고 파일명을 던져 버리는 것처럼 보이는 파일 이름 –

+0

오해, 오해, 내 게시물을 편집 –

+0

멋진 감사, basename 명령은 완벽하게 작동 함 –

관련 문제