我知道
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 \;