重命名shell中的多个文件

时间:2011-08-02 11:29:32

标签: bash shell

我在目录中有多个文件,例如:linux_file1.mp4linux_file2.mp4等等。如何使用shell移动这些文件,以便名称为file1.mp4file2.mp4等。我有大约30个文件要移动到新名称。

4 个答案:

答案 0 :(得分:100)

我喜欢mmv这类事情

mmv 'linux_*' '#1'

但您也可以使用rename。请注意,通常有两个rename命令具有非常不同的语法。一个用Perl编写,另一个用util-linux分发,所以我将它们区分为“perl rename”和“util rename”。

使用Perl重命名:

rename 's/^linux_//' linux_*.mp4

正如cweiske正确指出的那样。

使用util rename:

rename linux_ '' linux_*.mp4

你怎么知道你有哪个重命名?尝试运行rename -V;如果您的版本是util rename,它将打印版本号,如果它是perl重命名,它将无害地报告和未知选项并显示用法。

如果您没有renamemmv并且不想或不能安装它们,您仍然可以使用普通的旧shell代码完成此操作:

for file in linux_*.mp4 ; do mv "$file" "${file#linux_}" ; done

此语法适用于符合XPG4或更高版本的任何POSIX sh,这些日子基本上都是shell。

答案 1 :(得分:17)

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

答案 2 :(得分:5)

一种简单的原生方式,使用目录遍历

find -type f | xargs -I {} mv {} {}.txt

将重命名每个文件,最后添加扩展名.txt。

使用并行化

,这是一种更为一般的酷炫方式
find -name "file*.p" | parallel 'f="{}" ; mv -- {} ${f:0:10}trump${f:4}'

答案 3 :(得分:5)

通过组合@dtrckd和@Sorpigal答案,我能够在目录中替换文件名。

for file in `find -name "linux_*.mp4"`; do mv "$file" "${file/linux_/}" ; done