如何在 linux/mac 上 mv 点文件而不包含父目录?

如何在 linux/mac 上 mv 点文件而不包含父目录?

可能重复:
我可以将 . 和 .. 排除在 .* 扩展之外吗?

我知道

mv * ~/whatever
mv .* ~/whatever

但是这会尝试移动...,这给我带来了很多麻烦。有没有办法移动所有文件,包括文件.*,但排除当前目录及其父目录?

答案1

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

mv .[^.]* somewhere/

答案2

摘自 Bash 手册,shopt部分内容:

dotglob     If set, bash includes filenames beginning with a `.' in the results
            of pathname expansion.

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

因此

shopt -s dotglob
mv * ~/whatever

按照你的要求来做。用以下方法测试一下:

shopt -s dotglob
ls -d *

查看哪些文件匹配。

因为这是手册中所述的事实上的 Bash 方式,所以对于名称复杂的文件,不应该出现任何隐藏的意外。如果出现了,那么从定义上讲,这是 Bash 中的一个错误。

答案3

尝试这个:

mv .[a-zA-Z0-9]* ~/whatever

._除非您有以或其他非字母数字字符开头的点文件,否则它应该会全部获取它们。

答案4

使用 find 排除...

find . -name ".*" -mindepth 1 -maxdepth 1

并检查结果。要移动文件

find . -name ".*" -mindepth 1 -maxdepth 1 -exec mv {} ~/whatever \;

相关内容