我有一些文件需要重命名。我尝试使用 xargs 和 mv 命令,但出现错误
mv: illegal option -- 1
usage: mv [-f | -i | -n] [-v] source target
mv [-f | -i | -n] [-v] source ... directory
我的目录包含 -1,-2,-3 之类的文件
我使用的命令是
ls | xargs -I{} mv '{}' old'{}'
这里的问题是文件名以-
开头。大多数 bash 内置命令将-
前面的任何内容都视为命令的可选参数。可以使用--
来指示命令选项的结束。例如,此处将-1
作为mv
命令的参数。
您可以使用
ls | xargs -I{} mv -- '{}' old'{}'
注意:您可以在xargs
中使用-t
标志来查看正在执行的命令。可能会使调试更容易。
从man bash
除非另有说明,否则本节中记录的每个内置命令都接受选项前面有
-
接受--
以表示选项的结束。
:
、true
、false
和test
内置不接受选项,也不特别对待--
。exit
、logout
、break
、continue
、let
和shift
内置接受和处理以-
开头的参数,而无需--
。其他接受参数但未指定为接受选项的内置将-
开头的参数解释为无效选项,并要求--
来防止这种解释。请注意,
echo
不会将--
解释为选项的结束。