Unix:以破折号开头的文件 -

Unix:以破折号开头的文件 -

好的,我有一堆以破折号 - 开头的文件。这不太好……我想重命名它们。在我的特定情况下,我只想在它们前面放一个字符。

我发现下面这一行应该可以工作,但是由于它的破折号,它却不能工作:

for file in -N*.ext; do mv $file x$file; done

如果我把一个放在echo前面,mv我会得到一堆

mv -N1.ext x-f1.ext
mv -N2.ext x-f2.ext

这是正确的,当然,它会认为第一个文件名是 options。因此,当我删除echo并运行它时,我只会得到一堆

mv: illegal option -- N

我尝试将其改为

for file in -N*.ext; do mv "$file" "x$file"; done

但似乎引号被忽略了。尝试使用单引号,但变量没有展开...我该怎么办?

更新:我现在也尝试引用这些引文。像这样:

for file in -N*.ext; do mv '"'$file'"' '"'x$file'"'; done

当我回应它时,它看起来是正确的,但是当我实际运行它时,我只得到

mv: rename "-N1.ext" to "x-n1.ext":: No such file or directory

我现在根本不知道该怎么做……

答案1

您需要使用关键字--来告诉动量命令的参数不应被解释为选项。注意:

$ mv -N1.ext x-f1.ext
mv: invalid option -- N
Try `mv --help' for more information.

$ mv -- -N1.ext x-f1.ext
$ ls
x-f1.ext

使用-- 命令行上的所有选项。例如,如果您尝试使用-i选项动量,它会去 --

mv -i -- -filename-begins-with-dash newfilename

答案2

另一种技术是将父目录包含在文件名中......

要将文件重命名-file-to-renamefile-to-rename...

mv  ../parent-dir/-file-to-rename  file-to-rename

感谢@Skippy le Grand Gourou 确认可与... 配合./-file-to-rename使用。mvrm

mv  ./-file-to-rename  ./--file-to-rename
    
rm  ./-file-to-rename

相关内容