流式比较两个目录中的内容

流式比较两个目录中的内容

如何将流式传输(在一个命令或脚本中)作为以下任务:

  • 比较两个目录 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

您可以通过两种方法来完成:

  1. 使用软链接

    使用此命令在目标文件夹中获取源的另一个副本

    ln -s  source destination
    

    但在这种情况下,一旦源文件或目录被删除,链接将被破坏,您将无法访问它。

  2. 使用rsync

    rsync -avzh sourcepath destinationpath
    

    此命令将自动同步源和目标。为此命令安排 1 分钟的 crontab,以便它不断检查和更新。

相关内容