我有一個目錄的全名的文件:「file1.mp4.mp4 file1.mp4.mp4 file1.mp4.mp4 ......」。使用正則表達式重命名一組文件的最佳方式是什麼?
我想用找到「file1.mp4.mp4」到「file1.mp4」和其他一些bash的工具會是這個樣子,但用正則表達式來重命名所有的人:
找。 -name「* .mp4」| xargs echo -0
我有一個目錄的全名的文件:「file1.mp4.mp4 file1.mp4.mp4 file1.mp4.mp4 ......」。使用正則表達式重命名一組文件的最佳方式是什麼?
我想用找到「file1.mp4.mp4」到「file1.mp4」和其他一些bash的工具會是這個樣子,但用正則表達式來重命名所有的人:
找。 -name「* .mp4」| xargs echo -0
用重命名。如果所有的文件都在同一目錄下,你可以這樣做:
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
$
或者嘗試在一個循環中這個簡單的bash命令?
mv /path/to/file.{mp4.mp4, mp4}
find . -name '*.mp4.mp4' -exec echo mv {} \`dirname {}/\`/\`basename {} .mp4\` \; > mp4.sh && ./mp4.sh && rm mp4.sh
與您的解決方案的問題是,當出現在文件名稱中的空格它不管用。 – fenec 2012-01-13 19:21:35
這與OQ非常一致,如果需要的話,更改是微不足道的。 – 2012-01-13 19:24:32
嘗試是這樣的 -
for file in /path/to/dir/*.mp4; do
mv "$file" "${file%.*}";
done
看看這裏:http://stackoverflow.com/q/417916/900873 – Kevin 2012-01-13 17:09:51