全球重命名为bash

wim*_*wim 5 bash glob space mv echo

如果这是一个基本的问题,我对bash很新,很抱歉.我试图重命名一堆mp3文件以前置1-到他们的文件名,并且mv *.mp3 1-*.mp3不幸地不起作用.所以我试着编写脚本,先用echo来测试命令:

for f in *.mp3 ; do echo mv \'$f\' \'1-$f\'; done
Run Code Online (Sandbox Code Playgroud)

这似乎输出了我喜欢的命令,所以我删除了echo,将命令更改为

for f in *.mp3 ; do mv \'$f\' \'1-$f\'; done
Run Code Online (Sandbox Code Playgroud)

哪个失败了.接下来我尝试将命令向前管道化

for f in *.mp3 ; do echo mv \'$f\' \'1-$f\'; done | /bin/sh
Run Code Online (Sandbox Code Playgroud)

这有用,但如果有人能告诉我为什么中间命令不起作用我会有兴趣知道.或者如果有一个更优雅的单行程可以做我想要的,我也有兴趣看到它.

bmk*_*bmk 7

我认为你必须改变命令

for f in *.mp3 ; do mv "$f" "1-$f"; done
Run Code Online (Sandbox Code Playgroud)

否则,你会通过类似'file1.mp3''1-file1.mp3'mv(包括单引号).


l0b*_*0b0 7

干运行:

rename -n 's/^/1-/' *.mp3
Run Code Online (Sandbox Code Playgroud)

-n如果它看起来正确,请删除它以运行该命令.man rename详情.

  • 这在Debian上有效,但在CentOS上无效,在CentOS上,重命名命令不遵循此语法,并且功能更差。 (2认同)