好的,我有一堆以破折号 - 开头的文件。这不太好……我想重命名它们。在我的特定情况下,我只想在它们前面放一个字符。
我发现下面这一行应该可以工作,但是由于它的破折号,它却不能工作:
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-rename
为file-to-rename
...
mv ../parent-dir/-file-to-rename file-to-rename
感谢@Skippy le Grand Gourou 确认可与... 配合./-file-to-rename
使用。mv
rm
mv ./-file-to-rename ./--file-to-rename
rm ./-file-to-rename