我尝试使用rename命令重命名某些文件和文件夹时犯了一个小错误。
我现在处于一个所有文件和文件夹以a开头的状态。 (我的意思是一个点),它将linux作为隐藏文件标记。
我尝试在文件夹上使用mv命令,但现在看来创建了很多cifsXX文件(不知道它是什么),文件夹的内容消失了。在这种情况下,我并不在乎它因为它不是一个重要的文件夹,所以我们不要试图解决它。
那么,是否有人知道某种魔术技巧可以回到我没有的状态。我所有文件的前面?
我有更多的100个文件和文件夹,我犯了错误所以我很想找到一个安全且至少半自动化的解决方案,所以我不必为所有那些做到这一点之一。
答案 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