Bash脚本从存储在变量[重复]中的列表创建新文件夹

问题描述 投票:2回答:2

这个问题在这里已有答案:

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

bash var mkdir comm
2个回答
0
投票

替换这一行

newDirServer=$(comm -13 <(echo "$allDirLocal" | tr -s '\r') <(echo "$allDirServer" | tr -s '\r'))

并使用bash -x script.sh执行脚本以执行步骤


0
投票

这是你的解决方案:

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"
© www.soinside.com 2019 - 2024. All rights reserved.