![流式比较两个目录中的内容](https://linux22.com/image/122215/%E6%B5%81%E5%BC%8F%E6%AF%94%E8%BE%83%E4%B8%A4%E4%B8%AA%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E5%86%85%E5%AE%B9.png)
如何将流式传输(在一个命令或脚本中)作为以下任务:
- 比较两个目录 dir1 和 dir2 的内容(文件和文件夹)
- 如果 dir1 目录中出现新文件,则开始将它们复制到 dir2 并同时使用处理程序处理它们:
diff -> 复制 -> 执行 some.sh
答案1
使用以下命令列出 dir1 到 file1.txt 的内容
ls -ltr | awk '{print $9}' > /var/tmp/file1.txt
file1.txt包含此内容
t1
1
l.sh
r.txt
l.py
l.txt
p.txt
使用以下命令列出 dir2 到 file2.txt 的内容
ls -ltr | awk '{print $9}' > /var/tmp/file2.txt
t1
1
l.sh
r.txt
l.py
l.txt
现在,与 file1.txt 相比,此命令将找到 file2.txt 中不存在的内容,并将其复制到目录 2
awk 'NR==FNR {a[$1];next}!($1 in a) {print $1}' file2.txt file1.txt |
awk '{print "cp -rvfp" " " "directory1path”$1 " " "directory2path"}' |
sh
答案2
您可以通过两种方法来完成:
使用软链接
使用此命令在目标文件夹中获取源的另一个副本
ln -s source destination
但在这种情况下,一旦源文件或目录被删除,链接将被破坏,您将无法访问它。
使用rsync
rsync -avzh sourcepath destinationpath
此命令将自动同步源和目标。为此命令安排 1 分钟的 crontab,以便它不断检查和更新。