AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1299541
Accepted
Raj
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 2 个回答
  • 917 Views

2 个回答

  • Voted
  1. 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 有一个选项
    • 10
  2. hc_dev
    2020-12-13T06:45:16+08:002020-12-13T06:45:16+08:00

    在为您提供粘贴和运行就绪的解决方案之前,我想解释一些 linux shell 的最佳实践和自动化模式。相同的概念也适用于其他 IT 领域:

    • 分而治之:将问题分成(孤立的)部分以便轻松解决
    • 关注点分离:这里作为命令删除;查找为查询 (CQRS)
    • 管道和过滤器:链中最佳工具的组合

    预览和管道解释

    尽管以下配方不适用于子目录(递归),但它说明了一种组合命令的安全且模块化的方法。

    a) 简单的列表和删除(在操作前先预览):

    1. 列出所有 HTML 文件(仅列出,不递归) ls *.html

    2. 然后删除 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”的错误。

    合并:查找并删除

    查找(在目录层次结构中搜索文件)并删除

    1. 使用管道(POSIX 兼容:在更多系统上运行)

      find . -type f -name "*.html" | xargs -r0 rm

    2. 直接执行以下命令(如垃圾 cli,以便稍后取消删除):

      find . -type f -name "*.html" -exec trash {}

    3. 直接使用方便的操作(可靠:避免产生和竞争条件)

      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
    • 1

相关问题

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 有没有办法重置所有包/源并从头开始?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve