Linux/UNIX:移动以短划线开头的文件

时间:2020-01-09 10:42:30  来源:igfitidea点击:

如何移动以短划线开头的文件(例如,"/home/you /-filename.txt"或者" /home/you/-filename.txt")?
如何复制名称以破折号/连字符(-)开头的文件?
许多元字符(例如分号,空格,反斜杠,美元符号,问号和星号)是在Linux和类Unix操作系统下被解释为shell命令的字符。
例如,"-"或者"-"(破折号或者连字符)解释为传递给命令的选项。
尝试使用以下建议来移动(mv)或者复制(cp)这些文件。
这些选项不限于mv命令或者cp命令。
在处理以破折号("-"或者"-")开头的文件名时,任何命令都可以使用提示。

从破折号开始移动文件

语法如下:

cp -- source dest
cp [option] -- source dest

我们使用--来使Linux和Unix命令停止解析shell命令行选项。
现在,让我们看一些例子。

创建一个测试文件

执行以下命令:

cd /tmp/
> '-foo.txt'
> '--bar.txt'

列出以破折号开头的文件

尝试列出它们,执行:

ls -l *.txt

您将得到如下错误:

ls: unrecognized option '--bar.txt'
Try `ls --help' for more information.

要分隔选项列表,请使用--,即执行以下ls命令:

ls -l -- *.txt

cp和mv命令

当文件名以"-"或者"-"开头时,请使用以下语法复制或者移动文件:

cp -- '--bar.txt' /path/to/dest
cp -- '-test.doc' /home/Hyman/backups/test.doc

或者

cp -v -- '--bar.txt' /path/to/dest

要移动文件:

mv -- '--bar.txt' /path/to/dest

或者

mv -v -- '--bar.txt' /path/to/dest

Unix和Linux复制文件以短划线开头

"-"或者"-"被视为命令行选项的一部分。
因此,您不能复制,列出,删除或者移动以这些字符开头的任何文件。
简而言之,语法如下:

cp options -- '--filename' /dest
mv options -- '--filename' /dest

"-"分隔选项列表。
以后的参数(如果有的话)将被视为操作数,即使它们以or开头。
这适用于所有Linux/Unix/macOS/* BSD命令,例如rm,cp,mv,ls,ln等:

command -- 'file'
command [options] -- 'file'
rm -- '--filename'
rm -fr -- '-dirname'
rmdir -- '--dirname'

如何将find命令用于相同目的

语法为:

find /dir/to/search -maxdepth 1 -name '--filename' -delete

提示:处理以破折号(-)开头的文件名

您可以通过以./(点斜杠)开头的文件名来隐藏命令中的破折号。
例如,尝试使用rm命令删除名为-filename.txt的文件:

> '-filename'
rm -filename # will get an error #
rm ./-filename