我在目录中有多个文件,例如:linux_file1.mp4
,linux_file2.mp4
等等。如何使用shell移动这些文件,以便名称为file1.mp4
,file2.mp4
等。我有大约30个文件要移动到新名称。
答案 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重命名,它将无害地报告和未知选项并显示用法。
如果您没有rename
或mmv
并且不想或不能安装它们,您仍然可以使用普通的旧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