我有一个名为temp
. 在这个文件夹中,我有多个子文件夹(我不知道确切的数字)。现在我在temp
名为Untitled
. 现在我想将所有其他子文件夹移到Untitled
.
假设我在 temp 中有 3 个文件夹,名为 a、b、c。现在我创建Untitled
. 所以 temp 现在包含 4 个文件夹 a、b、c 和 Untitled。执行操作后 temp 将仅包含 Untitled 文件夹,其中 Untitled 包含 a、b、c。
如何使用 bash 实现这一点?
我的 Bash 版本(在 Ubuntu 16.04 上)
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
简而言之,您可以使用 bash 的扩展通配符来排除您想要省略的一个目录,并且不会出现错误:
在确保打开了扩展通配符之后,该
mv
命令通过将第一个参数 (!(Untitled)
) 扩展到当前目录中的每个文件和目录中,除了名为“Untitled”的文件和目录。然后将所有这些文件和目录移动到该Untitled
目录中。如果您只想将目录从当前目录移动到 Untitled 中,则添加一个字符:
...其中尾随
/
强制 bash 匹配目录而不是文件。以上将默认省略点文件(例如
.subdir
)。如果您也想选择这些,只需添加:有关这些 shell 选项的更多信息,请参阅:
假设您只有主文件夹中的文件夹,最简单的方法是从
temp
(第一个cd
到temp
):你会得到一个错误,说:
如果这对您来说是个问题,您可以使用循环
*
并逐个移动每个文件,跳过目标子文件夹。如果有要跳过的文件,请在
mv
命令之前的循环内添加条件。