这个问题在这里已有答案:
我正在尝试编写一个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
替换这一行
newDirServer=$(comm -13 <(echo "$allDirLocal" | tr -s '\r') <(echo "$allDirServer" | tr -s '\r'))
并使用bash -x script.sh执行脚本以执行步骤
这是你的解决方案:
newDirServer=$(comm -13 <(echo "$allDirLocal") <(echo "$allDirServer") | sed 's@^\./@@g' | sed -r 's@\r@@g' | grep -v '^\.$')
我删除了初始的./路径,并且使用sed删除了所有返回的字符和。文件夹为null。
完整的脚本:
#!/bin/bash
dirLocal="$HOME/etc.../etc...."
dirServer='/etc/etc/etc'
remoteServer='etcetcetc'
allDirLocal=$(cd "$dirLocal"; find -type d | sort)
allDirServer=$(ssh -t "$remoteServer" "cd \"$dirServer\"; find -type d | sort")
newDirServer=$(comm -13 <(echo "$allDirLocal") <(echo "$allDirServer") | sed 's@^\./@@g' | sed -r 's@\r@@g' | grep -v '^\.$')
while read line; do mkdir "$line"; done <<< "$newDirServer"