Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如果文件在两个目录中是公用的,则更新该文件;如果文件在一个目录中是唯一的,则将其删除_Linux_Shell_Unix - Fatal编程技术网

Linux 如果文件在两个目录中是公用的,则更新该文件;如果文件在一个目录中是唯一的,则将其删除

Linux 如果文件在两个目录中是公用的,则更新该文件;如果文件在一个目录中是唯一的,则将其删除,linux,shell,unix,Linux,Shell,Unix,假设Directory1 1.File1 2.File2 3.Subdirectory1 Subdirectory1 has : 3.1. File 3 3.2. File 4 及 目录2已被删除 1.File1 2.File3 3.Subdirectory1 Subdirectory1 has : 3.1. File 3 3.2. File 6 如果Directory2中存在唯一的文件,则必须将其删除。 如果文件同时存在于Directory

假设Directory1

1.File1 
2.File2
3.Subdirectory1
    Subdirectory1 has :
    3.1. File 3
    3.2. File 4

目录2已被删除

1.File1
2.File3
3.Subdirectory1
    Subdirectory1 has :
    3.1. File 3
    3.2. File 6
如果Directory2中存在唯一的文件,则必须将其删除。 如果文件同时存在于Directory1和Directory2中,则必须将Directory1中的文件复制到具有相同文件夹结构的Directory2[更新]。

只需使用diff,例如:

diff -r dir1 dir2 | grep dir1
Only in dir1: file2
Only in dir1/subdir1: file4
Only in dir2/subdir1: file6

然后,您可以awk,或者将结果存储在临时文件中,并在脚本中使用它。

您似乎在谈论镜像功能,请参阅尼斯开源工具rsync。

它可以完成所有这些甚至更多(如果需要,还可以通过LAN或SSH进行远程同步)

通常,您会使用以下命令行选项:

rsync -av /src/foo /dest
or
rsync -av /src/foo/ /dest/foo

注意:如果省略/src/foo的尾部“/”,rsync将镜像到/dest并创建一个foo子目录。您可以选择如何使用此命令。

可能与、、等重复。谢谢。我最初是从这个方法开始的。当文件在子目录中具有相同的名称时遇到问题。在这种情况下,您可以使用“find/dir1/-type f-exec md5sum{}\;>dir1.txt”,然后在dir2上使用相同的名称,而不是使用不同的名称。另一个解决方案是使用git!因此,不可能为两个不相同的文件创建相同的hashmap,但Directory1中的文件始终是directory2中文件的更新[给定]。在这种情况下,directory2中的文件必须替换为directory1中的文件。这就是为什么我认为应该在脚本中结合不同的方法。md5sum只会告诉您,即使名称相同,文件也确实不同。如果对您来说重要的不是名称而是内容,那么脚本应该始终将文件从dir1复制/移动到dir2。。。
rsync -av /src/foo /dest
or
rsync -av /src/foo/ /dest/foo