如何在不包括 linux/mac 上的父目录的情况下 mv 点文件?

spr*_*man 5 linux unix bash command-line

可能重复:
我可以保留 . 和 .. 出 .* 扩展?

我知道

mv * ~/whatever
mv .* ~/whatever
Run Code Online (Sandbox Code Playgroud)

但它试图移动...,这让我很痛苦。有没有办法 mv 所有文件,包括.*文件,但排除当前目录及其父目录?

cho*_*oba 7

只需告诉 bash 有第二个字符,它不是点。但是不会移动名为 like 的文件..file

mv .[^.]* somewhere/
Run Code Online (Sandbox Code Playgroud)


Dan*_*son 7

从 Bash 手册,shopt部分:

dotglob     If set, bash includes filenames beginning with a `.' in the results
            of pathname expansion.
Run Code Online (Sandbox Code Playgroud)

shopt可用于设置某些“shell 选项”,如手册中所述。见man bash

因此

shopt -s dotglob
mv * ~/whatever
Run Code Online (Sandbox Code Playgroud)

做你想做的。用例如测试它

shopt -s dotglob
ls -d *
Run Code Online (Sandbox Code Playgroud)

查看匹配的文件。

由于它是手册中事实上的 Bash 方式,因此对于具有棘手名称的文件,不应出现隐藏的惊喜。如果是这样,根据定义,它是 Bash 中的一个错误。