Linux重命名错误恢复

时间:2014-02-15 12:32:35

标签: linux rename

我尝试使用rename命令重命名某些文件和文件夹时犯了一个小错误。

我现在处于一个所有文件和文件夹以a开头的状态。 (我的意思是一个点),它将linux作为隐藏文件标记。

我尝试在文件夹上使用mv命令,但现在看来创建了很多cifsXX文件(不知道它是什么),文件夹的内容消失了。在这种情况下,我并不在乎它因为它不是一个重要的文件夹,所以我们不要试图解决它。

那么,是否有人知道某种魔术技巧可以回到我没有的状态。我所有文件的前面?

我有更多的100个文件和文件夹,我犯了错误所以我很想找到一个安全且至少半自动化的解决方案,所以我不必为所有那些做到这一点之一。

3 个答案:

答案 0 :(得分:2)

您可以循环浏览.*个文件,并将其重命名为删除点:

for file in .*
do
    mv "$file" "${file#*.}"
done

${var#*.}将所有内容剥离到第一个点,因此在这种情况下,它会获取不带前导点的文件名。

$ d="bbb.cc"
$ echo ${d#*.}
cc

$ d=".cc"
$ echo ${d#*.}
cc

答案 1 :(得分:0)

由于您喜欢rename,因此您可以将其用于解决问题。

rename . '' .*

注意:第二个参数实际上是空字符串,需要引号或参数不存在。您还需要.*,因为正常的*不会扩展为隐藏文件。

唉,这不起作用,因为它会尝试重命名...特殊目录条目,它将失败并中止。

这应该起作用:

for x in .*
do
rename . '' "$x"
done

...条目会失败,但会继续。

如果您想以递归方式执行此操作,则可以改为使用find

find . -name ".*" -exec rename . '' {} \;

请记住引用".*"中的find,因为您不希望shell扩展模式(find会处理它)。

答案 2 :(得分:0)

你可以使用shell脚本

#!/bin/bash
for i in .*
do
 mv $i  `echo $i | sed 's/\.//g'`  
done