我正在尝试删除并替换文件名中存在的引号。例如,我想改变:
$ ls
abc"def"ghi"jkl"mno
到这个
$ ls
abc:def:ghi:jkl:mno
在尝试解决这个问题时,我遇到了How to rename a bunch of files to eliminate quote marks,这正是我想要做的。但是,它对我的情况不起作用。为了找出原因,我尝试创建一个这样的测试文件:
$ touch abba\"abba\"cde\"cde\"efef
使用此文件,我遇到的解决方案(如上所述)有效。但为什么它不适用于第一个文件?
我发现的一件事是bash命令完成后会看到不同的东西。如果我输入
$ ls abb<tab>
bash将完成文件名,如下所示:
$ abba\"abba\"cde\"cde\"efef
就像我创造它一样。但对于原始文件,bash完成是这样的:
$ ls abc<tab>
结果
$ abc"def"ghi"jkl"mno
因此在测试用例文件中,有一个引号的转义,而在另一种情况下(我真的想要重命名的文件),没有转义引号。我不知道原始文件是如何命名的。
任何人都可以解释为什么bash会以不同的方式看到这些名称,以及如何重命名我的文件?
答案 0 :(得分:0)
以下是使用"(quotation)
标记
选项1:使用转义字符\
mv abc\"cdf\"efg\"hij newFileName
选项2 :使用'(single quote)
mv 'abc"cdf"efg"hij' newFileName
注意:在文件名中使用:(colon)
之类的特殊字符可能不是一个好主意,
并且关于自动完成,它通常用转义字符填充名称,例如
ls abc<tab>
会将名称改为 ls abc\"cdf\"efg\"hij
除非您使用引号启动名称,例如
ls 'abc<tab>
会将名称改为 ls 'abc"cdf"efg"hij'