目前,我有很多.mp4文件,它们的名称如下:
103160626309temp1ep10.mp4
103160626309temp1ep10.mp4.mp4
148999555452temp1ep6.mp4
148999555452temp1ep6.mp4.mp4
6802547045temp1ep5.mp4
6802547045temp1ep5.mp4.mp4
335587012366temp1ep4.mp4
335587012366temp1ep4.mp4.mp4
...
我必须删除所有带有单个.mp4的文件,并将.mp4.mp4重命名为.mp4。您对我该怎么办吗?
我考虑使用:
for i in ./*.mp4; do
...
和
for i in ./*.mp4.mp4; do
...
但是我很害怕,我不能丢失文件或损坏它们。
您能帮我解决这个问题吗? 谢谢。
答案 0 :(得分:2)
如果仅将.mp4.mp4
文件上的.mp4
文件重命名,则不需要单独的删除步骤。
(这假定每个.mp4
文件都有一个对应的.mp4.mp4
文件。如果不是这种情况,请参见下面的“多个步骤”说明。)
有几种方法可以做到这一点:
普通外壳:
for file in *.mp4.mp4; do
mv -- "$file" "${file%.mp4}"
done
(使用echo
而非mv
来查看它的作用,然后再“真正”运行。)
如果您拥有rename
的perl版本(有时也称为prename
或perl-rename
):
rename -f 's/\.mp4\.mp4\z/.mp4/' *.mp4.mp4
(使用rename -n
进行试运行。)
如果您具有rename
的util-linux版本:
rename .mp4.mp4 .mp4 *.mp4.mp4
当心;这将仅替换文件名中第一次出现的.mp4.mp4
,但希望它将始终位于文件名的末尾。
(再次使用rename -n
进行空试。)
如果您有mmv
:
mmv -d '*.mp4.mp4' '#1.mp4'
如果要分多个步骤进行操作:
为要保留的文件创建一个单独的目录:
mkdir to-be-kept
将所有.mp4.mp4
文件移动到该目录:
mv *.mp4.mp4 to-be-kept/
删除所有剩余的.mp4
文件(或将它们移到其他位置):
rm *.mp4
或将其移至其他位置:
mv *.mp4 some/other/directory
将.mp4.mp4
文件移回:
mv to-be-kept/* .
rmdir to-be-kept
使用上述食谱之一进行重命名。
您不需要rename -f
(改为使用普通的rename
)或mmv -d
(改为使用普通的mmv
),因为在这种情况下,无需覆盖现有文件