Raj Asked: 2020-12-13 04:47:31 +0800 CST2020-12-13 04:47:31 +0800 CST 2020-12-13 04:47:31 +0800 CST 删除批量文件 772 我需要删除所有 *.html 文件。但是,我有一个父文件夹,其中包含很多子文件夹,并且每个子文件夹中都存在一个 HTML 文件。我可以通过访问每个孩子的文件夹来删除文件。但是,我需要直接从父文件夹中删除每个 HTML 文件 uninstall command-line bash delete 2 个回答 Voted Best Answer Rinzwind 2020-12-13T04:51:27+08:002020-12-13T04:51:27+08:00 最简单的方法是: find . -type f -name '*.html' -delete 从要启动它的目录执行此操作。 find是搜索某物的命令 .表示来自您当前所在的目录 f表示仅搜索文件(d用于目录) 并搜索name结尾.html delete并且 find 有一个选项 hc_dev 2020-12-13T06:45:16+08:002020-12-13T06:45:16+08:00 在为您提供粘贴和运行就绪的解决方案之前,我想解释一些 linux shell 的最佳实践和自动化模式。相同的概念也适用于其他 IT 领域: 分而治之:将问题分成(孤立的)部分以便轻松解决 关注点分离:这里作为命令删除;查找为查询 (CQRS) 管道和过滤器:链中最佳工具的组合 预览和管道解释 尽管以下配方不适用于子目录(递归),但它说明了一种组合命令的安全且模块化的方法。 a) 简单的列表和删除(在操作前先预览): 列出所有 HTML 文件(仅列出,不递归) ls *.html 然后删除 rm *.html 这是安全第一的方法。您在删除之前预览并检查文件列表。确定要继续时,只需更改命令命令即可。 或者,您可以使用pipe轻松扩展您的工作流程: b) 直接与xargs结合 ls *.html | xargs -r0 rm 这xargs是必要的,因为 rm 无法从stdin读取。请参阅: http ://stackoverflow.com/questions/20307299/ddg#20307392 -r0结合了两个选项:-0将处理角落文件名(其中包含换行符、空格或引号)it's done.html,这些文件名更可靠地由 NUL 字符分隔。-r如果没有输入,则将停止运行。 请参阅: 如何递归删除当前目录中特定扩展名的所有文件? 和: https ://unix.stackexchange.com/a/83712 使用glob直接删除 在某些 shell(自版本 4 以来的 bash、ksh、zsh)中,您可以通过在路径中使用通配符 ( globstar ) 递归删除文件。 请参阅:https ://unix.stackexchange.com/questions/23576/how-do-i-recursively-delete-directories-with-wildcard 以及如何检查/启用 globstar 直接删除(危险): rm **/*.html 这种直接删除命令很危险,因为一个小的错字会产生不利影响。例如,当不小心插入一个空白时,rm *.html它会变成rm * .html. 不幸的是,它会删除所有文件,并可能打印找不到第二个路径“.html”的错误。 合并:查找并删除 查找(在目录层次结构中搜索文件)并删除 使用管道(POSIX 兼容:在更多系统上运行) find . -type f -name "*.html" | xargs -r0 rm 直接执行以下命令(如垃圾 cli,以便稍后取消删除): find . -type f -name "*.html" -exec trash {} 直接使用方便的操作(可靠:避免产生和竞争条件) find . -type f -name "*.html" -print0 -delete 解释: -type f只查找常规文件(不是目录d,不是符号链接) -name过滤给定模式之类的名称(也可以通过-or和扩展-regex) -print0在之前打印找到的文件路径(可靠地 NUL 分隔) -exec trash {}使用找到的文件作为参数执行给定的命令(这里是垃圾)(替换大括号) -delete直接删除找到的文件(性能很好,因为在同一进程中,尽管与所有查找版本不兼容) 请参阅值得注意的警告:如何递归删除当前目录中特定扩展名的所有文件? 更多关于查找、删除文件的 GNU 手册 批量删除注意事项:Linux 没有内置的取消删除功能 因此,在批量删除之前首先检查找到的内容。因此,我建议采取安全措施。 交互式而不是强制选项:for rm -i而不是-f 首先列出或查找,然后检查,然后删除(例如,通过附加管道或首先运行查找而不执行操作) 使用支持稍后撤消的垃圾文件夹工具:如垃圾-cli或gvfs-trash
最简单的方法是:
从要启动它的目录执行此操作。
find
是搜索某物的命令.
表示来自您当前所在的目录f
表示仅搜索文件(d
用于目录)name
结尾.html
delete
并且 find 有一个选项在为您提供粘贴和运行就绪的解决方案之前,我想解释一些 linux shell 的最佳实践和自动化模式。相同的概念也适用于其他 IT 领域:
预览和管道解释
尽管以下配方不适用于子目录(递归),但它说明了一种组合命令的安全且模块化的方法。
a) 简单的列表和删除(在操作前先预览):
列出所有 HTML 文件(仅列出,不递归)
ls *.html
然后删除
rm *.html
这是安全第一的方法。您在删除之前预览并检查文件列表。确定要继续时,只需更改命令命令即可。
或者,您可以使用pipe轻松扩展您的工作流程:
b) 直接与xargs结合
这
xargs
是必要的,因为 rm 无法从stdin读取。请参阅: http ://stackoverflow.com/questions/20307299/ddg#20307392-r0
结合了两个选项:-0
将处理角落文件名(其中包含换行符、空格或引号)it's done.html
,这些文件名更可靠地由 NUL 字符分隔。-r
如果没有输入,则将停止运行。请参阅: 如何递归删除当前目录中特定扩展名的所有文件?
和: https ://unix.stackexchange.com/a/83712
使用glob直接删除
在某些 shell(自版本 4 以来的 bash、ksh、zsh)中,您可以通过在路径中使用通配符 ( globstar ) 递归删除文件。
请参阅:https ://unix.stackexchange.com/questions/23576/how-do-i-recursively-delete-directories-with-wildcard
以及如何检查/启用 globstar
直接删除(危险):
这种直接删除命令很危险,因为一个小的错字会产生不利影响。例如,当不小心插入一个空白时,
rm *.html
它会变成rm * .html
. 不幸的是,它会删除所有文件,并可能打印找不到第二个路径“.html”的错误。合并:查找并删除
查找(在目录层次结构中搜索文件)并删除
使用管道(POSIX 兼容:在更多系统上运行)
find . -type f -name "*.html" | xargs -r0 rm
直接执行以下命令(如垃圾 cli,以便稍后取消删除):
find . -type f -name "*.html" -exec trash {}
直接使用方便的操作(可靠:避免产生和竞争条件)
find . -type f -name "*.html" -print0 -delete
解释:
-type f
只查找常规文件(不是目录d
,不是符号链接)-name
过滤给定模式之类的名称(也可以通过-or
和扩展-regex
)-print0
在之前打印找到的文件路径(可靠地 NUL 分隔)-exec trash {}
使用找到的文件作为参数执行给定的命令(这里是垃圾)(替换大括号)-delete
直接删除找到的文件(性能很好,因为在同一进程中,尽管与所有查找版本不兼容)请参阅值得注意的警告:如何递归删除当前目录中特定扩展名的所有文件?
更多关于查找、删除文件的 GNU 手册
批量删除注意事项:Linux 没有内置的取消删除功能
因此,在批量删除之前首先检查找到的内容。因此,我建议采取安全措施。
-i
而不是-f