概括:
- 文件夹 A 只有许多优秀文件
- 文件夹 B 包含许多混合了优秀/良好/不良文件的文件夹
我怎样才能删除文件夹 B 文件夹中的文件(前提是它们位于文件夹 A 中)。
换句话说,如何检查文件夹 B 文件夹中是否存在文件夹 A 文件,然后从文件夹 B 文件夹中删除?
解决方案 也许是一个命令:
- 检查字母表的一部分,例如所有以 A 开头的字母
- 对文件夹 B 子文件夹中找到的文件执行删除操作
- 重复 1. + 向上一个字母。
其他复制程序不好的原因:
- 第一次删除需要很长时间 - 只有扫描完成后才可以
- 并且无法选择在文件夹 B 中删除。只能保留最新的内容和其他内容,但不能选择保留在哪个文件夹中。
无用的历史:文件已从 Recuva 复制到文件夹 B 中,部分已整理,但其中很多文件已损坏。因此,首先,我在考虑文件夹 B 是否存在于那些已恢复的文件,但现在 Recuva 仅在文件夹 A 中恢复了 Excelent,因此大多数 Excelent 都位于文件夹 A 中。
示例文件树:
.
├── A
│ ├── 1.png
│ ├── 2.png
│ └── Excellent
│ ├── e1.png
│ └── e2.png
└── B
├── 1.png
├── 2.png
├── Bad
│ ├── 1.png
│ ├── 2.png
│ ├── e1.png
│ └── e2.png
└── Excellent
├── e1.png
└── e2.png
答案1
以下是两种解决方案,取决于我们如何定义“重复”:
- 具有相同相对路径的文件,或
- 内容相同但名称不一定相同的文件
如果我们所说的“重复”是指两个共享相同相对路径的文件,那么您可以使用find
和xargs
删除重复项。例如,假设您有
~/tmp% tree A
A
└── Excellent
├── bar
├── baz
└── foo
~/tmp% tree B
B
├── Bad
│ └── quux
├── Excellent
│ ├── bar
│ ├── baz
│ └── foo
└── Good
然后
find /home/unutbu/tmp/A -depth -type f -print0 | xargs -0 -I{} bash -c 'rm "/home/unutbu/tmp/B${1#*A}"' - {}
结果是
~/tmp% tree B
B
├── Bad
│ └── quux
├── Excellent
└── Good
或者,如果我们所说的“重复”是指两个文件共享相同的内容,尽管文件名可能不同,但是您可以使用rdfind
:
sudo apt-get install rdfind
如果我们有这样的目录结构:
~/tmp% tree A
A
└── Excellent
├── bar
├── baz
└── foo
1 directory, 3 files
~/tmp% tree B
B
├── Bad
│ └── quux
├── Excellent
│ ├── barbar
│ ├── bazbaz
│ └── foofoo
└── Good
其中barbar
的内容与 相同bar
,并且bazbaz
和 的内容也类似foofoo
,那么
rdfind -deleteduplicates true A B
结果是
~/tmp% tree B
B
├── Bad
│ └── quux
├── Excellent
└── Good
替代解决方案如果你的 Ubuntu 版本不包含 rdfind:
你也可以使用fdupes
:
sudo apt-get install fdupes
fdupes --recurse --delete --noprompt A B