2012-01-13 19 views
0

我有一個目錄的全名的文件:「file1.mp4.mp4 file1.mp4.mp4 file1.mp4.mp4 ......」。使用正則表達式重命名一組文件的最佳方式是什麼?

我想用找到「file1.mp4.mp4」到「file1.mp4」和其他一些bash的工具會是這個樣子,但用正則表達式來重命名所有的人:

找。 -name「* .mp4」| xargs echo -0

+1

看看這裏:http://stackoverflow.com/q/417916/900873 – Kevin 2012-01-13 17:09:51

回答

0

您是否有rename命令?如果是的話,你可以嘗試:

rename .mp4 "" *.mp4.mp4 

這將會從所有文件中刪除最後.mp4後綴與當前目錄擴展.mp4.mp4

2

用重命名。如果所有的文件都在同一目錄下,你可以這樣做:

rename 's/\.mp4.mp4$/.mp4/' *.mp4.mp4 

否則,你可能想是這樣的:

rename 's/\.mp4.mp4$/.mp4/' `find . -name "*.mp4.mp4"` 

而且,要看到當您運行rename會發生什麼,只是調試聲明,這樣做:

rename --no-act 's/\.mp4.mp4$/.mp4/' *.mp4.mp4 

這甚至工作,如果文件名包含空格,例如:

$ touch foo.mp4.mp4 
$ touch "bar baz.mp4.mp4" 
$ ls 
bar baz.mp4.mp4 foo.mp4.mp4 
$ rename 's/\.mp4.mp4$/.mp4/' *.mp4.mp4 
$ ls 
bar baz.mp4 foo.mp4 
$ 
+0

什麼'rename'命令是這樣嗎?我的's/\ mp4.mp4 $/.mp4 /'或識別'--no-act'不起作用。 – dogbane 2012-01-13 17:15:03

+0

我正在運行Ubuntu 11.11。據我所知,在Ubuntu附帶的BASH版本中,「rename」是標準配置。如果你看看你的手冊頁,或許''rename'的語法與我的不同? – snim2 2012-01-13 17:53:40

+0

與您的解決方案的問題是,當出現在文件名稱中的空格將無法正常工作。 – fenec 2012-01-13 19:16:04

2

或者嘗試在一個循環中這個簡單的bash命令?

mv /path/to/file.{mp4.mp4, mp4} 
0
find . -name '*.mp4.mp4' -exec echo mv {} \`dirname {}/\`/\`basename {} .mp4\` \; > mp4.sh && ./mp4.sh && rm mp4.sh 
+0

與您的解決方案的問題是,當出現在文件名稱中的空格它不管用。 – fenec 2012-01-13 19:21:35

+0

這與OQ非常一致,如果需要的話,更改是微不足道的。 – 2012-01-13 19:24:32

1

嘗試是這樣的 -

for file in /path/to/dir/*.mp4; do 
    mv "$file" "${file%.*}"; 
done 
相關問題