重命名多个文件的shell
我在一个目录中有多个文件,例如: linux_file1.mp4 , linux_file2.mp4等等。 如何使用shell移动这些文件,以便名称是file1.mp4 , file2.mp4等。 我有大约30个文件,我想移动到新名称。 
我喜欢mmv这种东西
 mmv 'linux_*' '#1' 
 但是你也可以使用rename 。 请注意,通常有两个rename命令,语法非常不同。 一个是用Perl写的,另一个是用util-linux发布的,所以我把它们区分为下面的“perl rename”和“util rename”。 
用Perl重命名:
 rename 's/^linux_//' linux_*.mp4 
正如cweiske正确指出的那样。
随着util重命名:
 rename linux_ '' linux_*.mp4 
 你怎么知道你有哪个重命名? 尝试运行rename -V ; 如果你的版本是util重命名它将打印版本号,如果它是perl重命名它将无害地报告和未知的选项,并显示使用情况。 
 如果你没有rename或mmv ,不想或者不能安装它们,你仍然可以用普通的旧shell代码来完成: 
 for file in linux_*.mp4 ; do mv "$file" "${file#linux_}" ; done 
这个语法将适用于符合XPG4或更高版本的任何POSIX sh,而这些基本上是所有shell。
 $ rename 's/linux_//' linux_*.mp4 
一个简单的本地方式来做到这一点, 目录遍历 :
 find -type f | xargs -I {} mv {} {}.txt 
将最后重命名每个文件join扩展名.txt。
而一个更普遍的并行化很酷的方式:
 find -name "file*.p" | parallel 'f="{}" ; mv -- {} ${f:0:10}trump${f:4}' 
我能够通过结合@dtrckd和@Sorpigal答案来实现replace目录中的文件名。
 for file in `find -name "linux_*.mp4"`; do mv "$file" "${file/linux_/}" ; done