我正在编写一个 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/