如何在 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
就可以将其作为单个参数读取
我正在编写一个 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
就可以将其作为单个参数读取