2017-08-13 97 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

相关问题