bash - Bash 脚本从存储在变量中的列表创建新文件夹
问题描述
我正在尝试编写一个 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") <(echo "$allDirServer") | sed 's@^\./@@g' | sed -r 's@\r@@g' | grep -v '^\.$')
我已经删除了初始 ./ 路径并使用 sed 删除了所有返回字符和 . 为空的文件夹。
完整脚本:
#!/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"
推荐阅读
- graphql - 在 Strapi 中限制属于所有者的 Graphql 结果
- video-streaming - VLC 电视流媒体的频道控制
- java - 如何以一种方法处理 2 个数据库?
- python - 类型错误:“在‘str’和‘float’的实例之间不支持”?
- javascript - 将输入文本的值解析为 GTM 变量宏?
- r - 如何使用 WorldClim 数据计算 R 中的热指数
- c - 在 MacOS 上调用 abort() 会导致陷阱,但不会产生核心转储
- c# - 获取不同对象的Json String中的一个对象
- c++ - 为什么没有调用copy assignment方法?
- ubuntu - 无法将 WebP 添加到 ImageMagick