我在 Mac 中运行失败
mv .* *
和
mv .* ./*
我的文件消失得无影无踪。
如何安全地将点文件转换为非点文件?
for i in `ls -d .*`; do mv $i "`echo $i | sed 's/^.//'`"; done
或者,更容易,
rename 's/^.//' `ls -d .*`
如果你的系统有它。
在 zsh 中,您可以安全地使用 .*,但在 bash 中,您必须使用ls -d .*
棘手的部分是选择点文件而不选择“。” 和 ”..”。
ls .??*
有时用于此目的,因为它强制文件名长度为三个或更多字符。但是,存在忽略具有短名称(例如“.x”)的点文件的风险ls -d .*
防止目录被扩展,但它不会过滤掉“。” 或者 ”..”find
可以使用该命令,如find . -maxdepth 1 -type f -name '.*'
. maxdepth 将其限制为当前目录而不是子目录。-type f 将其限制为文件,消除诸如“.”之类的目录。和 ”..”。再说一次,也许您想将 .ssh 目录重命名为 ssh。这是一种选择点文件同时避免“。”的替代方法。和 ”..”。
ls -A | sed -n 's/^\.\(.*\)/mv ".\1" "\1"/p' | bash
-A 列出所有文件和点文件,但消除“。” 和“..”对我们来说。然后 sed 命令只选择那些带有 "." 的行。作为第一个字符,并打印出适当的“mv”命令,并加上引号,以防你有一个奇怪的点文件名,其中有一个空格。
先在不带“| bash”的情况下运行它,看看生成了哪些 mv 命令。
我不知道你使用的是什么类型的系统,但它看起来像 unix,我会的
ls -1 .?* | 切-b1- | xargs -i{} mv .{} {}
这列出了以 . 开头但不是 . 的所有内容。或..,然后切断第一列,然后将该列表传递给移动命令
更简单:
对于 x in .*; 做 mv $x ${x/./}; 完毕