【发布时间】:2023-04-07 11:33:01
【问题描述】:
我正在尝试编写一个 bash 脚本来创建与我服务器上的目录具有相同名称和结构的新文件夹。
首先我得到所有目录并按名称对它们进行排序:
allDirLocal=$(cd $dirLocal ; find -type d |sort)
allDirServer=$(ssh -t $remoteServer "cd $dirServer ; find -type d |sort")
然后我比较了它们以查找我的本地驱动器上缺少哪些目录:
newDirServer=$(comm -13 <(echo "$allDirLocal") <(echo "$allDirServer"))
然后我尝试在本地机器上创建上述目录:
for Dir in "$newDirServer" ; do mkdir $Dir ; done
但我最终得到的目录如下所示:
'exampleDir'$'\r' 而不仅仅是 exampleDir
我该如何解决这个问题?
编辑:我不想从 txt 文件而是从变量创建目录树,但我总是以这种奇怪的格式结束...
编辑:我实际上只需要用 ' ' 替换 " " 以摆脱目录名称中的那些转义符号......我只花了一个月的时间就弄清楚了:P
【问题讨论】:
-
我猜你的脚本本身包含 CRLF 行尾。检查
od -c script.sh并使用您的编辑器或dos2unix进行修复 -
您确定远程服务器上的文件名不包含尾随 CR 吗?我不认为 SSH 会话可以添加它们,但也许也可以调查一下。
-
排序和本地比较并不是真正需要的,并且会使您的处理复杂化。只需
mkdir -p在每个远程目录名称上;那些已经存在的将是无操作的。