2017-08-13 95 views
2

我想以這樣的方式重命名所有以「.mp4」結尾的文件,而不是用空格來包含下劃線。 例子:如何使用-exec找到並重命名所有文件

Original file -> test 1.mp4 
Renamed file -> test_1.mp4 

我與努力:

find . -iname "*.mp4" -exec mv {} $(echo '{}' | tr " " "_") \; 

但我只得到:

mv: ‘./test 1.mp4’ and ‘./test 1.mp4’ are the same file 

看來,我管不working.I將不勝感激所有的想法。

+0

試試'找到。 -iname「* .mp4」-exec mv「{}」$(echo'{}'| tr「」「_」)\;'祝您好運。 – shellter

回答

0

我想看看使用重命名命令,假設你的發行版提供它。在Debian的:https://packages.debian.org/rename

如果您不需要在子目錄中搜索:

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

如果你這樣做:

find . -iname "*.mp4" -execdir rename 's/\ /_/' {} \;

如果多個空格必須更換,搜索/替換表達式變成's/\ /_/g'

如果你真的想保持你的語法/方法,看到這個非常類似的問題:find -exec with multiple commands

+0

由於搜索將是遞歸的,「查找」方式應該更合適,但它會給出錯誤: [code] $ find。 -iname「* .mp4」-exec rename's/\/_ /'{} \; 重命名:沒有足夠的參數[/ code] – hunter86bg

+0

我一直無法重現你的錯誤。我假設你的發行版(它是哪一個?)有一個不同的命令來回答「重命名」。但在我的測試中,我發現當遇到名稱包含空格的目錄時,遞歸答案將失敗(具有不同的錯誤)。因此我刪除了答案的那部分。 – jmr

+0

發行版本是CentOS 7.確實存在「重命名」,但我從未設法使其工作。 – hunter86bg

0

看來,迄今爲止唯一的方法是通過「重命名」命令。

這裏是工作的命令:

find /tmp/test/ -iname "*.mp4" -exec rename " " "_" "{}" \; 
+0

這隻代替了第一個空格字符並且必須多次重新運行以替換全部。 – hunter86bg

相關問題