2013-03-23 29 views
3

我想編寫一個linux腳本,將所有文件的文件名(但擴展名不同)的所有文件移動或複製到所有這些文件的新文件名,同時保留其不同的擴展名。換句話說:批處理使用不同的擴展名重命名多個文件Linux腳本?

如果我開始有一個目錄列表:

file1.txt, file1.jpg, file1.doc, file12.txt, file12.jpg, file12.doc

我想編寫一個腳本來改變所有的文件名不改變擴展。對於同樣的例子,選擇文件2爲新的文件名中的結果將是:

file2.txt, file2.jpg and file2.doc, file12.txt, file12.jpg, file12.doc

所以其文件的文件不符合目前的標準不會改變。

最良好的祝願,

喬治

+0

'file1 *'+ loop – 2013-03-23 10:03:23

+0

爲什麼file2匹配file1而不是file12?相同的名字長度,以一位數字結尾? – PeterMmm 2013-03-23 10:06:26

回答

4

注:如果有變量ifile1.doc,在這種情況下表達${i##*.}提取擴展即doc


一號線的解決方案:

for i in file1.*; do mv "$i" "file2.${i##*.}"; done 

腳本:

#!/bin/sh 
# first argument - basename of files to be moved 
# second arguments - basename of destination files 
if [ $# -ne 2 ]; then 
    echo "Two arguments required." 
    exit; 
fi 

for i in $1.*; do 
    if [ -e "$i" ]; then 
     mv "$i" "$2.${i##*.}" 
     echo "$i to $2.${i##*.}"; 
    fi 
done 
+0

謝謝你的建議。不幸的是,腳本運行時filename1是未知的。我正在處理數百個文件夾,其中有6個文件,其中3個具有相同的文件名(可變數字和字母列表),但有3個不同的擴展名。在每個文件夾中只有2個文件名。示例:Folder1包含:filetextwords12.gif,filetextwords12.jpg,filetextwords12.txt,filextwordste23.gif,filextwordste23.jpg,filextwordste23.txt。 Folder2將包含一個類似的設置(每個文件類型3個不同的文件名)。謝謝! GH – 2013-03-23 16:16:09

+0

程序如何知道是要更改'filetextwords12'還是'filetextwordste23'文件? 'filetextwordste23'也應該以'filetextwords12'類似的方式移動?如果你可以詳細說明一下,也許我們可以幫助你... – plesiv 2013-03-24 11:07:13

0

處理輸入文件,文件的基本名稱包含特殊字符,我將修改plesiv的腳本如下:

if [ $# -ne 2 ]; then 
    echo "Two arguments required." 
    exit; 
fi 

for i in "$1".*; do 
    if [ -e "$i" ]; then 
     mv "$i" "$2.${i##*.}" 
     echo "$i to $2.${i##*.}"; 
    fi 
done 

請注意$ 1附近的額外引號。

2

util-linux-ng軟件包(大多數Linux版本都默認安裝了)包含命令'rename'。有關使用說明,請參閱man rename。使用它你的任務可以這樣簡單

rename file1 file2 file1.*

相關問題