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

How to accommodate spaces in a variable in a bash and iterate in directory tree in linux

我正在编写一个 bash 脚本来遍历目录和子目录,检查进程是否打开了一个文件, 如果是,将其移动到另一个位置 如果没有跳过它 我的问题是源文件夹的名称是空格,例如 "FTP SYNC LOCAL" 到目前为止,我的脚本能够遍历文件夹和子文件夹并测试文件是否被另一个进程打开。

仅当文件名不包含 SPACE 时才会执行此操作,如果包含,则什么也不会发生

print_folder_recurse() {
for i in ""/* ;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 "" ]; then
    path=;
else
    direct="/Source/FTP Sync"
    echo $direct
    path="$direct"
fi

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

问题出在带有变量 "direct" 的代码底部。如果我写它

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

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

文件执行。

我可以通过写入文件夹来防止这个问题 Source/FTP_Sync 但我可以这样做,因为它会影响主要工作流程。

如有任何帮助,我们将不胜感激

print_folder_recurse 函数将 $path 变量读取为 2 个单独的参数,因为变量之间有 space,即 = /Source/Ftp = Sync。解决方案是像这样 print_folder_recurse "$path"$path 变量用双引号括起来,这样 print_folder_recurse 就可以将其作为单个参数读取