我有两个目录,我想要包含大部分相同的信息。 我写了基本脚本
#!/bin/bash
# Update the two folders
cp -vur ../catkin_ws/src .
cp -vur . ../catkin_ws/src
现在我想更改它,只更新目录及其内容,但不更新顶级目录中的其他文件,如bash脚本本身。
如果无法做到这一点,有没有办法在更新期间排除某些文件?
答案 0 :(得分:0)
假设您要将../catkin_ws/src
与当前目录同步,并且当前脚本位于当前目录中。据我所知,您只想同步顶级目录(包括其内容),而不是同步位于顶层的其他类型的节点,即直接在../catkin_ws/src
或./
内。 / p>
然后使用find
命令轻松完成:
src_dir="../catkin_ws/src"
find "$src_dir" -mindepth 1 -maxdepth 1 -type d \
-exec cp -vru {} . \;
find ./ -mindepth 1 -maxdepth 1 -type d \
-exec cp -vru {} "$src_dir" \;
其中{}
代表找到的下一个目录。
如果您想进一步过滤,可以使用其他选项,例如-name
,-path
或-regex
。例如,以下跳过目录x
:
find "$src_dir" -mindepth 1 -maxdepth 1 -type d \
! -name 'x' \
-exec cp -vru {} . \;
其中!
导致下一个表达式返回True
,如果表达式为false,则表示作为某种逻辑NOT
运算符。
上述命令的缺点是按顺序为每个文件夹启动cp
命令(由于\;
)。如果要为所有源运行单cp
命令,可以使用this answer中描述的方法。
P.S。
我没有尝试建议更好的方法来同步目录,但只建议了一种方法来修复当前的方法。