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

标签 bash centos iteration space

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

只有当文件名中不包含空格时才会这样做,如果包含,则什么也不会发生

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”的代码底部。如果我写的话

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

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

文件执行。

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

我们将不胜感激

最佳答案

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

关于bash - 如何在 bash 中的变量中容纳空格并在 linux 中的目录树中迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40515510/

相关文章:

bash - 在某些情况下,grep的结果与预期不符

macos - 用于创建以当前日期命名的文件的 OS X 终端命令

mysql - 如何在 mysql 中创建模式以及如何将现有记录导入数据库?

nginx - 我的 NGINX 服务器已关闭。如何重新启动它?我对 NGINX 和 CentOS 还很陌生

python - 在 python 中查找对称对

c++: vector<string> 的迭代

bash - bash中两个字符串的最长公共(public)前缀

linux - 如何使用 tasket 将 cpu 核心分配给带有参数的程序的多个实例

apache - apache 错误日志中的 httpdocs/cache 条目

python - 分割数据的美丽汤策略