2015-04-28 69 views
1

我有文件的列表:批量重命名一組文件的名稱中帶有星號(*),以hashs(#)

file*1.ext 
fil*e2.ext 
fi*le3.ext 

我想這些重命名爲:

file#1.ext 
fil#e2.ext 
fi#le3.ext 

命令:

rename -v 's/\*/\#/' * 

給我:

Unknown option: 0 
Unknown option: 0 
Unknown option: 0 
Unknown option: 1 
Unknown option: 1 
Unknown option: 1 
Unknown option: 2 
Unknown option: 2 
Unknown option: 2 
Unknown option: 3 
Unknown option: 4 
Usage: rename [-v] [-n] [-f] perlexpr [filenames] 

任何想法我失蹤了?

+0

我'rename'比你的不同。你的'rename'包是從哪裏來的?它是'/ usr/bin/rename'嗎? –

+0

在我的系統上,您的命令按原樣成功執行。 – anishsane

+0

是**注意:**在計算世界中存在2 **完全不同的''rename'軟件包。一個相當健壯,一個最小。在選擇使用之前確認您擁有哪個版本。 –

回答

2

哦,我有我有你的命名其他分銷: 這應該工作:

rename 's/\*/#/' * 
+0

重命名的另一個軟件包應該可以工作:'rename'*''#'*' –

0

這會將所有的系統上運行使用bash:

#!/bin/bash 
files=*.ext 
for file in $files; do 
file="${file:0:-4}" 
[[ "$file" == *"*"* && -f $file.ext && ! -L $file.ext ]] && 
newfile="${file//'*'/'#'}" && mv "$file.ext" "$newfile.ext" 
done 

,而忽略目錄和符號鏈接。

0

請注意,在單引號中沒有任何內容(包括反斜槓)。因此,你應該沒有添加反斜槓。

$ rename --version 
rename (util-linux-ng 2.17.2) 

$ ls 
file*1.ext fil*e2.ext fi*le3.ext 

$ rename '*' '#' * 

$ ls 
file#1.ext fil#e2.ext fi#le3.ext 
0

它可以很容易地使用bash 子更換來完成:

for i in *\**; do mv "$i" "${i//\*/#}"; done 

例/使用

$ ls -1 *\** 
fi*le3.ext 
fil*e2.ext 
file*1.ext 

$ for i in *\**; do mv "$i" "${i//\*/#}"; done 

$ ls -1 *\** 
ls: cannot access ***: No such file or directory 

$ ls -1 *#* 
fi#le3.ext 
fil#e2.ext 
file#1.ext