重命名包含空格和标点符号的文件

重命名包含空格和标点符号的文件

我们的 Global Linux 3.0.31-0.9 服务器中有人放置了一个文件名中包含多个空格、括号、问号和冒号的文件。

我已经无计可施,无法重命名或删除它了!

附上了我尝试删除/重命名文件为“乱码”的文件名和命令的示例这里

我的ls输出:

-rw-r--r--  1 root   root       11306 May  2 03:25 who suggesting to assign this issue to the group which is responsible for the application StreamServe. (Probably it is operated by Linq????:q
-rw-------  1 root   root       15797 Jun 12 12:59 .viminfo
-rw-------  1 root   root        1200 Jun 12 13:00 .lesshst
drwxrwxrwx 32 root   root        4096 Jun 13 00:00 .snapshot
-rw-------  1 root   root       32976 Jun 13 14:05 .bash_history

答案1

对名称难以输入的文件进行操作的简单方法是使用补全。在这种情况下,由于名称的前几个字符很容易键入,因此键入它们,然后按Tab

$ mv 谁Tab找到了.txt

如果无法确定第一个字符,可以按Tab,./循环查看当前目录中的所有文件名。

shell 的完成命令将使用'or\或无论如何编程生成一个带引号的字符串。

或者,您可以自己制作这个带引号的字符串。在单引号内,除了单引号本身之外,所有字符都会被正常解释。因此,如果文件名不包含任何单引号,请将其粘贴在单引号之间 - 但您需要有实际的文件名(如 打印的那样ls --show-control-chars),而不是用一些不可打印字符替换的文件名。如果文件名中有单引号,则将其替换为'\''(单引号、反斜杠、单引号、单引号)。例如,对于名为 的文件it's,您可以使用'it'\''s'.

或者,您可以制作仅与该文件匹配的通配符模式。例如,在这种情况下:

$ ls -d w*
who suggesting to assign this issue to the group which is responsible for the application StreamServe. (Probably it is operated by Linq????:q
wibble

在我的示例中,有两个匹配的文件,因此通配符不够好。添加一个角色就可以了。

$ ls -d wh*
who suggesting to assign this issue to the group which is responsible for the application StreamServe. (Probably it is operated by Linq????:q
mv who* found.txt

如果第一个字符不可打印,您可以选择与名称的不同部分匹配的另一个模式。您可以使用类似[!#-z]*or[!0-9A-Z_a-z]*或的模式[![:alnum:]]*来排除文件名开头常用的字符。

如果文件名以-(ASCII 破折号或连字符)开头,则它可能会被解释为一个选项。使用./-wibble来避免这种情况。

答案2

将有问题的文件名括在引号中可能是删除或重命名它的最简单方法。首先创建一个测试文件:

rm "   -myfile(1):ok?"

如果文件仅以连字符开头,请使用“--”告诉命令不存在更多选项,并且前导连字符是命令参数:

rm -- -myfile

如果您的文件名包含不可打印的字符,您可以在find确定其索引节点号后将其删除:

find . -iname "*myfile*" -exec ls -i {} +

9225180 ./ -myfile(1): 可以吗?

find . -inum 9225180 -exec rm -i {} +

删除 ./ -myfile(1): 可以吗?

-i将(交互式)响应添加到命令中,例如rm允许您确认您正在对您想要的实体进行操作。

相关内容