Shell Bash脚本递归遍历目录、比较和同步文件
我正在尝试编写一个bashshell脚本来同步两个不同路径上的内容 我正在努力寻找的算法包括以下步骤Shell Bash脚本递归遍历目录、比较和同步文件,shell,Shell,我正在尝试编写一个bashshell脚本来同步两个不同路径上的内容 我正在努力寻找的算法包括以下步骤 给定两条完整(相对于相对)路径 递归比较文件(其文件名可能有 basename和后缀)在两个路径的相应目录中 如果相应的目录或文件不存在,则 将每个文件(从文件夹路径)复制到另一个文件 对应的文件夹 我已经找出了第一步和第二步 OLD_IFS=$IFS # The extra space after is crucial IFS=\ for old_file in `diff -rq old/
OLD_IFS=$IFS
# The extra space after is crucial
IFS=\
for old_file in `diff -rq old/ new/ | grep "^Files.*differ$" | sed 's/^Files \(.*\) and .* differ$/\1/'`
do
mv $old_file $old_file.old
done
IFS=$OLD_IFS
谢谢。我用Java实现了一个类似的算法,基本上可以归结为:
a.lst
和B.lst
cmp
而不是diff
注意:当一个目录有一个目录,另一个文件具有相同的名称时,你需要考虑正确的动作应该是什么。sort
文件事先列出a.lst
和B.lst
,您可以使用而不是cat…|排序| uniq…
以执行设置操作:
- 交叉点:
comm-12a.sorted.lst B.sorted.lst
- 仅存在于A:
comm-23 A.sorted.lst B.sorted.lst中的文件
- 仅存在于B:
comm-13 A.sorted.lst B.sorted.lst中的文件
干杯为什么不使用类似于
rsync
的东西,而不是自己写一些能力较弱的东西呢?自学。尝试学习如何编写bash脚本。但这不是家庭作业。没关系-第3步的具体问题是什么?我很难想出第3步的算法。grep
后跟sed
是对CPU周期的浪费。只需使用sed-e'/pattern/s/from/to/'。这个答案很好。我赞成保留。你不能期望这张海报能够识别并张贴一个程序中不属于他们的关键部分。尤其是当他们只想说“看,省省你的工作吧,那边的这个可以用了”