2013-07-11 36 views

回答

0

如果這是一次性的(或不經常)之際,我想如果經常出現這種需要創建

$ ls > rename.sh 
$ vi rename.sh 
:%s/\(.*\)/mv \1 \1/ 
(edit manually to remove all the XXXXX from the second file names) 
:x 
$ source rename.sh 

一個腳本,我需要更多的洞察XXXXX,YYY和ZZZZZZZZZZZ都是。


補遺

修改這個根據自己的喜好:

ls | sed "{s/\(.*\)\(............\)\.txt$/mv \1\2.txt \1.txt/}" | sh 

它通過.txt之前省略12個字符,使所得mv命令到一個外殼轉換文件名。

注意:如果有不匹配的文件名,它會執行文件名—而不是mv命令。我省略了一種只選擇匹配文件名的方法。

+0

那麼,讓我這樣說:在文件名中的.txt之前刪除的最後12個字符。 – user2417881

+0

我可能正在考慮如何在擴展名爲.txt之前的最後n個字符完成此操作,其中n是可變的。但具體而言,這是最後12個字符。而且這一定要經常進行。 – user2417881

+0

@ user2417881:我修改了我的答案。請注意,它的範圍有限。 – wallyk

0

在這種情況下,您似乎有一個_要啓動要刪除的每個部分。如果是這樣的話,那麼這應該工作:

for f in *.txt 
do 
    g="${f%%_*}.txt" 
    echo mv "${f}" "${g}" 
done 

取出echo如果輸出似乎是正確的,或與done | ksh替換的最後一行。

如果文件不是所有.txt文件,這更多的是小將軍:

for f in * 
do 
    ext="${f##*.}" 
    g="${f%%_*}.${ext}" 
    echo mv "${f}" "${g}" 
done 
+0

感謝您的回覆。如何擴展你的代碼到一個情況,我必須刪除擴展名爲.txt之前的最後12個字符,例如。 – user2417881

+0

如果它恰好是12,那麼''{f%????????????}'(12'?'s)將在您已經刪除擴展名後生效,如果您的'ksh'是新的......或者'$ {f%{12}(?)}'。這些都是'ksh'某些版本中的所有新特性,所以請查看系統中的'man ksh'以獲取更多信息... – twalberg

相關問題