如何在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
的print_folder_recurse
功能读取$path
变量,因为空间的2个独立的参数在变量即$1 = /Source/Ftp
之间而$2 = Sync
。解决的办法是包裹$path
可变双引号这样print_folder_recurse "$path"
使print_folder_recurse
可以读取它作为一个参数
的'echo'命令也应该有自己的论点双引号(例如'回声“$ I”'),但它通常并不重要。通常。一般来说,不加引用的变量引用会引起麻烦;文件名中的空格只是没有它们而可能出错的事情之一。 –
谢谢你,解决方案多么愚蠢。 – user1176607
参见[我的回答](http://*.com/questions/40426859/bash-script-ignoring -whitespaces-in-script-parameters/40428501#40428501)到类似的问题。 – hidefromkgb