2014-03-12 16 views
0

修改文件名我有一個目錄,如:/data/work/files/如何在bash

calldata_phonecalls_2131201401_01.zip calldata_phonecalls_7373201401_02.zip

在這個目錄下我想創建對應於像zipfiles,但修改名稱的一小部分新文件BASH

calldata_calllog_2131201401_01.tsv calldata_calllog_7373201401_02.tsv

PL記 「電話中」 變更爲 「calllog」

Pl幫助。

回答

4

使用Shell Parameter Expansionbasename

for f in /data/work/files/*.zip; do 
    mv "$f" "$(basename "${f/phonecalls/calllog}" .zip).tsv" 
done 

使用rename(perl的一部分):

rename 's/phonecalls/calllog/;s/\.zip$/.tsv/' /data/work/files/*.zip 
+0

通知文件擴展名。 –

+0

@HomayounAfshari沒有注意到;應該現在修好。 – devnull

+0

這錯過了名稱上的修改.. – user1189851

1

使用重命名:

使用重命名的一個版本中:

rename 's/^fgh/jkl/' fgh* 

使用命名的另一個版本:

rename fgh jkl fgh* 

你應該檢查你的平臺的手冊頁,看看哪些上述適用。

用mv:

find ./ -name "*.xyz\[*\]" | while read line 
do 
mv "$line" ${line%.*}.xyz 
done 

另一種方式

ls -1 | nawk '/foo-bar-/{old=$0;gsub(/-\(.*\)/,"",$0);system("mv \""old"\" "$0)}' 

另一個:

for f in fgh*; do mv $f $(echo $f | sed 's/^fgh/jkl/g'); done 

有下計算器和超級用戶頁面其他幾個答案:

複製/總結從下面的鏈接:

Rename multiple files in Unix

How to use mv command to rename multiple files in unix?