我想通过命令从服务器中删除文件bash rm
。
这是一个示例文件Test_ Mürz.jgp
。
如何大规模地删除文件名中存在此类字符问题的文件……尤其是当您不知道字符的位置时。
答案1
对于单个文件或小组文件,如果通配符通配符不能满足您认为需要的精度,则可以组合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
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 编号,因此您要确保没有任何多余的名称被删除(除非您想显然要做到这一点)。
答案2
简单的方法:
ls -i Test_*
rm -i [inode number]
答案3
您有什么“宏伟”目标?
这为什么还不够呢?
$ rm Test_*
深入文件目录树的一种方法:
$ find /your/base/dir -maxdepth 3 -type f -name 'Test_*' -exec rm {} \;
您可以调整 find 命令来精确查找您的文件。
答案4
有三种方法:
- 使用 inode 来识别文件名。首先执行 ls 命令并检查 inode 文件,如上所述
- 对于新手来说,可以使用 Midnight Commander :)
- 您必须转义特殊字符。空格(_ 为了视觉效果)_ 您将其替换为 _ ,以及其他字符。
- 您可以使用 bash 扩展。在开始时写入开头:rm Test_ 并按 TAB 键。它们会立即扩展转义字符以获得唯一名称,或为您显示非唯一名称的可能性。然后您将看到如何在命令行中编写特殊字符。
- 您可以通过转义:somename\263\261rest_of_name 来转义unicode。您可以使用十进制字符代码进行转义。