尝试 mv 文件名中带有 -r 的文件时出错

尝试 mv 文件名中带有 -r 的文件时出错

这是我的问题:

我有一个名为 -r 的文件:-r.jpg

当我尝试做时,mv *.jpg old/我得到了:

mv: invalid option -- 'r'

即使是

for g in *.jpg;do echo $g &&mv "${g}" old/;done

我也有同样的错误。

答案1

大多数命令行实用程序都提供了单独的选项参数

这可以防止出现许多问题“特别的”看起来像选项的文件名。

表示选项结尾的最常见分隔符是两个连字符--或 ,--这也受 的支持mv

换句话说:

 mv [OPTIONS] -- SOURCE DEST

或者由于您没有指定任何选项:

 mv -- *.jpg old/

答案2

最简单的解决方案是在文件名前面添加./描述相对路径

for g in *.jpg; do echo $g && mv "./${g}" old/; done

也可以使用绝对路径

for g in $(pwd)/*.jpg; do echo $g && mv $g old/; done

或者,您可能想要使用该find命令,因为它已经提供了相对路径(--max-depth如果您只想处理当前目录,则可以使用)

for g in $(find . -name "*jpg"); do mv $g old; done

在最坏的情况下,如果你有许多复杂的无法解析的字符,你可以参考 inode 编号并find -inum相应地处理你的文件

 $ for g in $(ls -i1 ./*jpg | cut -f1 -d' '); do find . -inum $g -print0 | xargs -0 -I '{}' mv '{}' old; done

相关内容