2014-02-15 64 views
0

我犯了一個小錯誤,試圖使用rename命令重命名一些文件和文件夾。Linux重命名錯誤恢復

我現在處於所有文件和文件夾都以a開頭的狀態。 (我的意思是一個點),它變成了Linux的隱藏文件標記。

我試圖在一個文件夾上使用mv命令,但它似乎現在創建了大量的cifsXX文件(不知道它是什麼)並且文件夾的內容消失了。在這種情況下,我並不在乎,因爲它不是一個重要的文件夾,所以我們不要試圖解決這個問題。

那麼,有沒有人知道某種魔術回滾到我沒有的狀態。我所有文件的前面?

我有更多的100個文件和文件夾,我犯了錯誤,所以我很想找到一個安全的解決方案,至少半自動化,所以我不必爲所有這些一個。

+0

'LS -a'將顯示點文件。而'mv .dotfile dotfile'會將它重新命名爲它的無壓縮版本。 (使用'mv -i .dotfile dotfile'來增加安全性) – wildplasser

回答

2

可以遍歷您的.*文件並重新命名刪除點:

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

${var#*.}條一切到第一點,所以在這種情況下,獲取文件名沒有前導點。

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

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

你是一個明星人,這個人就像一個魅力! – Georges

+0

很高興看到這個,@Georges :)既然你是新來的,請不要忘記標記接受的答案,如果你的問題已經解決了。您可以點擊答案旁邊的複選標記將其從空心切換爲綠色。請參閱[幫助中心>提問](http:// stackoverflow。com/helpcenter/someone-answers)如果你有任何疑問! – fedorqui

+0

是的,我試圖標記它,但顯然我不得不等待一下。再次感謝! – Georges

0

既然你是喜歡rename你可以用它爲您的問題。

rename . '' .* 

注意:第二個參數實際上是空字符串,你需要引號或參數不會存在。您還需要.*,因爲正常*不會擴展到隱藏文件。

唉,這不起作用,因爲它會嘗試重命名...特殊目錄條目,它會失敗並中止。

這應該工作,而不是:

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

它將爲...項失敗,但它會繼續下去。

如果你想這樣做遞歸你可以使用find代替:

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

記住引述".*"find,因爲你不希望shell擴展模式(find將處理它)。

0

您可以使用DOIT shell腳本

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