比较两个文件夹中丢失的文件

泰迪291

我有两个不同的文件夹,每个文件夹中都有相同的文件名,但是其中一个缺少文件。我怎么能够在两个文件夹比较Folder1Folder2并列出缺少文件Folder2,其Folder1包含的内容。

库萨兰达
$ tree
.
|-- dir1
|   |-- file1
|   |-- file2
|   |-- file3
|   |-- file4
|   `-- file5
`-- dir2
    |-- file2
    |-- file4
    `-- file5

2 directories, 8 files
$ for f1 in dir1/*; do f2="dir2/${f1#dir1/}"; [ ! -e "$f2" ] && printf '%s\n' "$f2"; done
dir2/file1
dir2/file3

这将循环遍历第一个目录中的所有名称,并为每个名称创建一个预期存在于第二个目录中的文件的对应名称。如果该文件不存在,则打印其名称。

循环更详细地写出来(并且使用basename而不是参数替换从第一个目录中的文件的路径名中删除目录名):

for f1 in dir1/*; do
    f2="dir2/$( basename "$f1" )"
    if [ ! -e "$f2" ]; then
        printf '%s\n' "$f2"
    fi
done

如果两个目录中的文件不仅具有相同的名称,而且具有相同的内容,则可以使用diff(请注意:diff此处使用的是BSD ,GNUdiff可能会说其他话):

$ diff dir1 dir2
Only in dir1: file1
Only in dir1: file3

如果具有相同名称的文件的文件内容不同,则显然会输出很多可能不需要的附加数据。diff -q在这种情况下可能会使其安静一些。

另请参见diff系统上手册。


为了比较更深的层次结构,您可能需要使用rsync

$ rsync -r --ignore-existing -i -n dir1/ dir2
>f+++++++++ file1
>f+++++++++ file3

上面的代码将为每个文件的下一行输出一行,该文件下dir1没有对应的文件dir2-n选项(--dry-run)可以确保没有文件实际上是转移到dir2

-r选项(--recursive),使操作递归和-i--itemize-changes)选择特定的输出格式(在>f与加号表明该文件是在接收端一个新的文件)。

另请参见rsync手册。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何比较两个不同文件夹中的文件并执行条件复制

使用BATCH中的HASH SHA1比较两个文件夹中的文件

SVN比较两个文件夹并导出命令提示符中的差异

比较两个文件夹,并使用bash根据序列号将丢失的文件复制到新文件夹

比较带有不同扩展名的“独立文件夹”中的两个不同文件,并使用pywinauto打开一个文件

如何在PowerShell中比较两个文件夹并创建缺少的子文件夹

比较不同目录中的文件夹名称并在csv中输出两个结果-PowerShell

如何递归比较两个文件夹并生成不同文件和文件夹的列表?

比较两个文件夹并在两个文件夹中输出丢失的文件

使用批处理脚本比较两个文件夹中的文件

比较两个文件夹时如何避免.git文件

在MATLAB中查看两个(或多个文件夹)

比较Excel VBA中文件的两个文件夹

通过哈希比较两个文件夹的内容以查找重复项

两个不同文件夹中的两个不同的wordpress网站

linux +在两个文件夹之间进行比较

比较两个文件夹,将一个文件夹中的不同文件复制到另一个文件夹

比较两个文件夹并列出Windows中第三个文件夹中的差异

Python - 如何在两个不同文件夹中一一比较文件

将文件夹中的所有内容复制到两个文件目标文件夹中

比较和重命名两个文件夹之间的重复文件

如何同步两个不同系统中的两个文件夹

如何比较两个文件夹中的多个屏幕截图

如何递归比较两个不同文件夹中的用户和组?

通过批处理文件比较两个文件夹的内容而不是两个文件的内容

比较两个文件夹,返回不同文件的完整路径

PowerShell:比较两个不同文件夹中的文件

使用C#比较两个文件夹中的文件

比较两个 Google Drive 文件夹的内容