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
    • 最新
    • 标签
主页 / server / 问题 / 537749
Accepted
mahatmanich
mahatmanich
Asked: 2013-09-11 03:07:24 +0800 CST2013-09-11 03:07:24 +0800 CST 2013-09-11 03:07:24 +0800 CST

如何删除文件名有 utf-8 字符问题的文件

  • 772

我想通过bash rm命令从服务器中删除文件。

这是一个示例文件Test_ Mürz.jgp。

如何大规模删除文件名中具有此类字符问题的文件……尤其是当您不知道字符的位置时。

linux
  • 5 5 个回答
  • 7134 Views

5 个回答

  • Voted
  1. Best Answer
    user
    2013-09-11T05:05:20+08:002013-09-11T05:05:20+08:00

    对于单个文件或小型文件集,如果通配符通配符不能让您获得所需的精度,您可以组合ls -i(或stat,如果可用)和find -inum.

    为安全起见,在使用 find 时-inum,请始终确保也使用-xdev将搜索限制为单个文件系统。不这样做可能会产生意想不到的结果。

    例如:

    ~$ ls -i myweirdfile
    183435818 myweirdfile
    ~$ find . -xdev -inum 183435818 -exec rm -i '{}' ';'
    rm: remove regular file `./myweirdfile'? y
    ~$
    

    或者,在一次调用中(这可能取决于 GNU coreutils stat,这在 Linux 上应该是一个相当安全的假设,并使用 sh 样式的进程替换):

    ~$ find . -xdev -inum $(stat -c '%i' 'myweirdfile') -exec rm -i '{}' ';'
    rm: remove regular file `./myweirdfile'? y
    ~$
    

    您也可以使用 find 的-delete操作而不是-exec'ing rm。对于非常奇怪的文件名,这可能更安全。使用-print或-ls首先验证将删除哪个文件。类似于以下内容:

    ~$ ls -i myweirdfile
    183435818 myweirdfile
    ~$ find . -xdev -inum 183435818 -print
    ./myweirdfile
    ~$ find . -xdev -inum 183435818 -delete
    ~$ find . -xdev -inum 183435818 -print
    ~$
    

    请记住,硬链接对多个名称使用相同的 inode 编号,因此您要确保在任何地方都没有被删除的杂散附加名称(除非您显然想这样做)。

    • 15
  2. Paul Rudnitskiy
    2013-09-11T04:20:32+08:002013-09-11T04:20:32+08:00

    简单的方法:

    ls -i Test_*
    
    rm -i [inode number]
    
    • 4
  3. rickhg12hs
    2013-09-11T04:07:45+08:002013-09-11T04:07:45+08:00

    你有什么“宏大”的目标?

    为什么这还不够?

    $ rm Test_*
    

    进入文件目录树的一种方法:

    $ find /your/base/dir -maxdepth 3 -type f -name 'Test_*' -exec rm {} \;
    

    您可以将 find 命令调整为对文件进行归零。

    • 2
  4. Znik
    2014-07-11T01:17:44+08:002014-07-11T01:17:44+08:00

    有三种方法:

    1. 对文件名使用 inode。首先执行 ls 命令并检查 inode 文件,如上所述
    2. 对于傻瓜,请使用午夜指挥官 :)
    3. 您必须转义特殊字符。空格(_ 表示视觉效果) _ 您替换为 _ 和其他字符。
    4. 您可以使用 bash 扩展。在开始写入开始时:rm Test_ 并按 TAB 键。它们会立即扩展转义字符以获得唯一名称,或者为您显示非唯一名称的可能性。然后你会看到你应该如何在命令行中编写特殊字符。
    5. 您可以通过转义来转义 unicode: somename\263\261rest_of_name 。您可以使用十进制字符代码进行转义。
    • 1
  5. pratik
    2014-07-11T01:34:59+08:002014-07-11T01:34:59+08:00

    我们也可以使用此命令rm ./"Test_ Mürz.jgp"删除此类文件

    • 1

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

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

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve