我想扫描文件名来源目录及其所有子目录然后将输出打印到文件中,例如:
ls -hR >> del.txt
(然而,我不知道如何不是列出文件夹)
我不需要将文件列表保存到文件中,但我认为这会使事情变得安全和清晰。
然后,我想要一个“命令”来搜索某个目的地目录及其子目录并删除del.txt
排除文件夹中所有匹配的文件。
这些文件的名称和扩展名差别很大,因此使用正则表达式无法解决问题,因为我只想删除这些文件。此外,我应该删除文件的目录中还有其他需要保留的文件,这些文件的扩展名与源目录中的文件相同。
答案1
您可以从源目录构建文件名列表,并将它们del.txt
作为空分隔条目保存到文件中,如下所示:
find . -type f -printf "%f\0" > del.txt
然后进行空运行测试,/full/path/to/destination/
用目标目录的实际完整路径替换,如下所示:
cat del.txt | xargs -0 -I {} find /full/path/to/destination/ -type f -name "{}"
如果您对输出满意,请使用以下命令删除文件:
cat del.txt | xargs -0 -I {} find /full/path/to/destination/ -type f -name "{}" -delete
或者,您可以将两个命令放入管道中以构建文件名列表,搜索它们并动态打印试运行,如下所示:
find . -type f -printf "%f\0" | xargs -0 -I {} find /full/path/to/destination/ -type f -name "{}"
然后像这样删除:
find . -type f -printf "%f\0" | xargs -0 -I {} find /full/path/to/destination/ -type f -name "{}" -delete
注意:以空分隔的文件名列表可能不易于人类阅读,但对于包含新行的文件名来说,这是一种更安全的方式。例如...您可以构建一个对人类友好的列表用于审查目的(即供您阅读并保存...不与上述命令一起使用),如下所示:
find . -type f -printf "%f\n" > my_list.txt