2013-03-01 62 views
1

我想用shell命令行來重命名一個文件。
例如:重命名x111.pngmy_x111.png(每個文件,添加前綴「MY_」)如何使用linux shell的管道重命名文件?

我知道mv xxx bbb是重命名XXX至BBB的最佳方式,但如何寫shell的命令?

+2

爲什麼你需要一個管道? '用於*中的文件;做mv「$文件」我的_「$文件」;完成' – 2013-06-19 10:24:33

+0

相關問題:[更好的方式基於多個模式重命名文件](http://stackoverflow.com/a/25597051/2654678)。 – 2014-08-31 23:13:09

回答

1
find -maxdepth 1 -type f | awk '{printf "mv %s my_%s\n", $2, $2}' FS=/ | sh 

 
mv README my_README 
mv tree.pl my_tree.pl 
mv youtube.sh my_youtube.sh 
0
ls -1 *.png | nawk '{p=$0;$0="my_"$0;;system("mv "p" "$0); }' 

參考here

+0

http://mywiki.wooledge.org/ParsingLs – 2013-06-19 08:20:19

0
rename 's/([^my_])(.*)/my_$1/g' * 

此命令預規劃所有文件名與my_排除已經與my_啓動文件名。

這取決於您的rename版本,這需要perl版本而不是util-linux-ng版本。

+0

這個正則表達式看起來不正確:'/([^ my _])(。*)/'將會找到一個文件,它有一個不是'm'或者' y'或'_'。文件「my_foo」*將被匹配。另外,'$ 1'是匹配括號的第一個*組,因此不是'm | y | _'的單個字符。你可能想要:'rename'substr($ _,0,3)!=「my_」和$ _ =「my _ $ _」'*' – 2013-06-19 10:18:57