让我在不考虑任何背景的情况下写这篇文章,希望尽可能简单。
也许最简单的描述方式是:
- 在 /shoots/*/ 中搜索所有名为“copy 1”、“copy 2”、“copy 3”的文件夹
- 列出所有文件夹
- 在每个文件夹上运行“fdupes -d -n”,不是递归'
根据 @infixed 之前的回答,我对此采取了更实际的方法 (比较相对于彼此路径的校验和的文件吗?)。注意:我不太了解Linux。以下命令很可能是错误的。
- cd /volume1/Modelshoots/shoots/
- ls
// 列出 /shoots/ 内的所有文件夹 - cd /*/ each
// 列出 /shoots/ 内每个文件夹内的所有文件夹 - grep -v“复制 1”列表.txt>脚本.sh
- grep -v“复制 2”列表.txt>脚本.sh
- grep -v "copy 3" list.txt > script.sh
// 排除所有文件夹,但包含名为“copy 1”、“copy 2”、“copy 3”的文件夹 'fdupes -d'
在每一行/路径前面添加
// 以便fdupes -d
对包含“copy #”的每个路径运行命令。- 执行脚本
进一步说明:
我想fdupes
删除我叔叔的大量照片和备份中的重复相同文件。我只想扫描名为“副本 1”、“副本 2”、“副本 3”等的文件夹,这些文件夹在“shoots”文件夹内的各种文件夹中调整大小。但是不是‘副本#’内的文件夹。
根文件夹 (/shoots/) 和每个 shoot 文件夹 (模型 A、模型 B 等) 均未处理,其他包含的文件夹 (selection) 也未处理。唯一需要扫描的文件夹是名为“副本 1”、“副本 2”等的文件夹。但是:不再更深!因此,不应扫描“副本 1”内的文件夹“selection”或“副本 2”内的文件夹“副本 1”!
答案1
虽然这不是一个完全解决你的问题的方法,如果它更复杂一点,你可以使用杰杜佩斯与-X 诺斯特或者-X onlystr选项来按子字符串进行过滤。但是,我注意到——对于您的确切用例——它比这容易得多:
cd /volume1/Modelshoots/shoots/
jdupes */copy*/
jdupes -dN */copy*/
这将非递归扫描与模式 /volume1/Modelshoots/shoots/ 匹配的每个目录中的每个文件/复制/ 你会注意到不包括拍摄 // 或射击 //copy*/*/ 目录。无需构建文件列表、摆弄中间命令和弄乱子字符串;只需告诉 jdupes 不要跟随子目录。第一次调用会显示匹配项列表;第二次调用会在没有提示的情况下删除所有重复项。