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 个回答 Voted 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 编号,因此您要确保在任何地方都没有被删除的杂散附加名称(除非您显然想这样做)。 Paul Rudnitskiy 2013-09-11T04:20:32+08:002013-09-11T04:20:32+08:00 简单的方法: ls -i Test_* rm -i [inode number] 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 命令调整为对文件进行归零。 Znik 2014-07-11T01:17:44+08:002014-07-11T01:17:44+08:00 有三种方法: 对文件名使用 inode。首先执行 ls 命令并检查 inode 文件,如上所述 对于傻瓜,请使用午夜指挥官 :) 您必须转义特殊字符。空格(_ 表示视觉效果) _ 您替换为 _ 和其他字符。 您可以使用 bash 扩展。在开始写入开始时:rm Test_ 并按 TAB 键。它们会立即扩展转义字符以获得唯一名称,或者为您显示非唯一名称的可能性。然后你会看到你应该如何在命令行中编写特殊字符。 您可以通过转义来转义 unicode: somename\263\261rest_of_name 。您可以使用十进制字符代码进行转义。 pratik 2014-07-11T01:34:59+08:002014-07-11T01:34:59+08:00 我们也可以使用此命令rm ./"Test_ Mürz.jgp"删除此类文件
对于单个文件或小型文件集,如果通配符通配符不能让您获得所需的精度,您可以组合
ls -i
(或stat
,如果可用)和find -inum
.为安全起见,在使用 find 时
-inum
,请始终确保也使用-xdev
将搜索限制为单个文件系统。不这样做可能会产生意想不到的结果。例如:
或者,在一次调用中(这可能取决于 GNU coreutils stat,这在 Linux 上应该是一个相当安全的假设,并使用 sh 样式的进程替换):
您也可以使用 find 的
-delete
操作而不是-exec
'ing rm。对于非常奇怪的文件名,这可能更安全。使用-print
或-ls
首先验证将删除哪个文件。类似于以下内容:请记住,硬链接对多个名称使用相同的 inode 编号,因此您要确保在任何地方都没有被删除的杂散附加名称(除非您显然想这样做)。
简单的方法:
你有什么“宏大”的目标?
为什么这还不够?
进入文件目录树的一种方法:
您可以将 find 命令调整为对文件进行归零。
有三种方法:
我们也可以使用此命令
rm ./"Test_ Mürz.jgp"
删除此类文件