2016-11-09 7 views
2

디렉토리와 하위 디렉토리를 반복하기 위해 bash 스크립트를 작성하고 있습니다. 프로세스가 파일을 열었는지 확인하려면 예로 이동하십시오. 다른 위치 건너 뛰지 않는 경우 내 문제는 "FTP SYNC LOCAL"과 같은 이름이 소스 폴더에 있음을 나타냅니다. 내 스크립트는 폴더와 하위 폴더에서 반복 실행하고 파일이 다른 폴더에서 열리는 지 테스트합니다 방법. 파일 이름은 이름에 공백을 포함하지 않는 경우가 않는 경우bash에서 변수의 공백을 수용하고 리눅스의 디렉토리 트리에서 반복하는 방법

그것은 단지, 아무것도 문제는 변수를 사용하여 코드의 하단에

print_folder_recurse() { 
for i in "$1"/* ;do 
    if [ -d "$i" ];then 
     echo $i 
     #lsof "$i" | grep Serv-U | wc -l 
     print_folder_recurse "$i" 
    elif [ -f "$i" ]; then 
     echo $i 
     flag=$(lsof "$i" | grep Serv-U | wc -l) 
      if [ $flag == 0 ];then 
     echo "Done" 
      elif [ $flag != 0 ];then 
       echo "Skip Next" 
      fi 
    fi 
done 
} 


path="" 
if [ -d "$1" ]; then 
    path=$1; 
else 
    direct="/Source/FTP Sync" 
    echo $direct 
    path="$direct" 
fi 

#echo "base path: $path" 
print_folder_recurse $path 

을 일어나지이 않습니다 "직접" . 작성한 경우

direct="/Source" 
echo $direct 
path="$direct" 
fi 

#echo "base path: $path" 
print_folder_recurse $path 

파일이 실행됩니다.

원본/FTP_Sync 폴더를 작성하여이 문제를 방지 할 수 있지만 주요 워크 플로에 영향을 줄 수 있으므로이 작업을 수행 할 수 있습니다.

어떤 도움을

+0

페이지의 [내 대답 (http://stackoverflow.com/questions/40426859/bash-script-ignoring 하나의 인자로 읽을 수 있도록이 print_folder_recurse "$path"처럼 따옴표에 $path 변수를 래핑하는 것입니다 -whitespaces-in-script-parameters/40428501 # 40428501)를 유사한 질문에 추가하십시오. – hidefromkgb

답변

1

print_folder_recurse 기능을 apprecaited됩니다 $2 = Sync 동안 변수 즉 $1 = /Source/Ftp 사이에 있기 때문에 공간이 개 별도의 인수로 $path 변수를 읽습니다. 이 솔루션은 print_folder_recurse

+1

'echo' 명령은 대개 중요하지 않지만 인수를 큰 따옴표로 묶어야합니다 (예 :'echo "$ i"'). 보통. 일반적으로 변수 참조를 인용 부호로 남겨 두는 것은 문제를 묻는 것입니다. 파일 이름의 공백은 공백 없이는 잘못 될 수있는 것 중 하나 일뿐입니다. –

+1

고마워요, 해결책이 어리석은 지요. – user1176607