首页 > 解决方案 > Linux 中 mv 命令的使用

问题描述

我有一堆具有不同扩展名的文件:

.png .fa .sh

它们位于名为“文件”的目录中。

我想移动每一个

.png to images directory
.fa to fasta directory
.sh to upper directory Golden_Asian.git/

移动 .png 和 .fa 文件效果很好,但是对于.sh文件,当我这样做时

mv files/*.sh Golden_Asian.git

它只是使键入 POSIX shell 脚本,ASCII 文本可执行,名称为

Golden_Asian.git

原始文件的名称是

 script.sh

所以我应该得到类似的结果

Golden_Asian.git/script.sh

我做错了什么还是正确的结果?

“files”目录中的原始文件已经消失,所以我很确定文件已转移到正确的目录,但不明白为什么名称已更改。

标签: linuxunixcommandmv

解决方案


如果只有一个文件并且当前目录.sh中没有调用目录,这是正确的结果。Golden_Asian.git您执行mv files/script.sh Golden_Asian.git了 ,因此它将文件从原始名称移动到您指定的名称。如果Golden_Asian.git当前目录中已经有一个文件,它将被新文件破坏(替换)。如果Golden_Asian.git当前目录中有一个名为的文件夹,那么在命令之后会有一个文件Golden_Asian.git/script.sh。这不是你得到的,所以当你执行命令时推断你没有Golden_Asian.git在当前目录中调用一个文件夹是合法的。

如果您指定:

mv *.sh Golden_Asian.git/

那么它就需要该目录存在并且结果将是一个文件Golden_Asian.git/script.sh。如果您有多个.sh文件,那么您需要该目录Golden_Asian.git存在。你说的是“上层目录”;你打算写:

mv *.sh ../Golden_Asian.git

如果父目录中有一个名为 的目录Golden_Asian.git,那么脚本将被移动到那里。如果没有目录,则该文件将被上移一级并重命名。同样,尾随/可以防止混淆。

请注意,将文件移动到 GIT 目录(尤其是裸存储库)可能不是一个好主意。


推荐阅读