在bash中查找并删除.txt文件

11

最近我搞糟了我的存储了照片的外置硬盘(虽然大部分已经在 DVD 上备份,但是……),原因是进行了一些分区操作。

不过幸运的是,我通过另一个 Unix 分区工具 PhotoRec 和 PDisk 把所有东西都整理好了。

PhotoRec 给我返回了超过一千个文件夹,里面装着各种文件,从 .txt 文件到重要的 .NEF 文件应有尽有。

于是我尝试使用 Unix 来简化分类排序,因为 OSX Finder 无法胜任如选中并删除十亿个 .txt 文件之类的任务。

但是我遇到了一些麻烦问题,例如查找并删除 txt 文件,或者递归查找并将所有 jpeg 文件移动到名为 jpegs 的新文件夹中。由于我是 Unix 初学者,所以需要帮助。

以下是我在 bash 中执行的命令(我位于会列出我需要处理的所有文件和文件夹的目录中):

find . -name *.txt | rm

或者

sudo find . -name *.txt | rm -f

它告诉我需要取消关联这些文件。无论如何,我需要递归查找并删除所有的 .txt 文件,最好能显示详细信息。


在您的Unix命令中添加-R选项。find . -name *.txt | rm -Rf http://www.computerhope.com/unix/urm.htm - Sense
3个回答

19

你不能将文件名传输到 rm。 你需要使用 xargs。 另外,记得引用文件模式 ".txt",否则shell会扩展它。

find . -name "*.txt" | xargs rm

好像已经处理了.txt文件。不知为何,之前我做的时候还剩下一些txt文件。可能是当我的bash标题栏在rm和mv之间闪烁时,我^C得太早了。无论如何,谢谢你解决了这个问题。我会确保引用文件模式(这不在我的Lynda OSX Unix教程中)。 - Propagator
4
这可能会在文件名中带有空格的情况下出现问题。如果他们的find/xargs组合可以处理它,那么这样做更好:find . -name "*.txt" -print0 | xargs -0 rm以创建ASCII NUL终止字符串。 - Jeremy J Starcher
是的,确实如此。Finder 找不到任何 .txt 文件。太棒了。 - Propagator

16
find . -name "*.txt" -exec rm {} \;

这个比较难记,因为结尾有 {} ; 的操作。 - Christopher Perry
这可能是真的,但一旦您记住了这个语法,它允许您对find命令返回的任何东西进行很多通用操作。 - mana

8
$ find  . -name "*.txt" -type f -delete

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接