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

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

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

怎么会去大文件中的文件名字的问题删除文件…特别是当你不知道的字符的位置。

对于单个文件或小文件集,如果通配符匹配不允许您认为需要的精度,则可以将ls -i (或stat ,如果可用)和find -inum

为了安全起见,当使用find的-inum ,一定要确保也使用-xdev来限制search到一个文件系统。 不这样做可能会有意想不到的结果。

例如:

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

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

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

你也可以使用find的-delete动作而不是-exec rm。 对于真正奇怪的文件名,这可能会更安全。 首先使用-print-ls来validation哪个文件将被删除。 像下面这样:

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

请记住,硬链接使用相同的inode号码为多个名称,所以你要确保没有任何地方被删除的附加名称(除非你这样做,显然)。

简单的方法:

 ls -i Test_* rm -i [inode number] 

你有什么“大规模”的目标?

为什么这不够呢?

 $ rm Test_* 

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

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

您可以调整find命令以将文件归零。

我们也可以使用这个命令rm ./"Test_ Mürz.jgp"删除这样的文件

有三种方法:

  1. 对文件名使用inode。 首先做ls命令并检查inode文件,如上所述
  2. 傻瓜,使用午夜指挥官:)
  3. 你必须逃避特殊字符。 空间(_为可视性)_您replace为_和其他字符。
  4. 你可以使用bash扩展。 开始写入开始:rm Test_并按TAB键。 他们立即扩大逃脱的字符为独特的名字,或显示为非唯一的可能性。 然后你会看到你怎么在命令行中写特殊字符。
  5. 你可以逃脱unicode:somename \ 263 \ 261rest_of_name。 您可以使用十进制字符代码进行转义。