如何在bash中的变量中容纳空格并在linux中的目录树中迭代

问题描述:

我正在编写一个bash脚本来遍历目录和子目录,检查一个进程打开的文件是否被移动到 其他位置 如果没有跳过它 我的问题是,源文件夹有空格是他们的名字,如“FTP SYNC LOCAL” 我的脚本能够至今在文件夹和子文件夹和测试迭代如果一个文件被另一个打开处理。如何在bash中的变量中容纳空格并在linux中的目录树中迭代

它不仅会如果文件名不包含在其名称中的空格,如果这样做,什么都没有发生

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防止这个问题,但我能做到这一点,因为它会影响主要的工作流程。

任何帮助将apprecaited

+0

参见[我的回答](http://*.com/questions/40426859/bash-script-ignoring -whitespaces-in-script-parameters/40428501#40428501)到类似的问题。 – hidefromkgb

print_folder_recurse功能读取$path变量,因为空间的2个独立的参数在变量即$1 = /Source/Ftp之间而$2 = Sync。解决的办法是包裹$path可变双引号这样print_folder_recurse "$path"使print_folder_recurse可以读取它作为一个参数

+1

的'echo'命令也应该有自己的论点双引号(例如'回声“$ I”'),但它通常并不重要。通常。一般来说,不加引用的变量引用会引起麻烦;文件名中的空格只是没有它们而可能出错的事情之一。 –

+1

谢谢你,解决方案多么愚蠢。 – user1176607