如何快速修改多个文件夹中的同名子文件?

背景: 有a, b两个文件夹, a, b下分别有50个文件夹, 每个文件夹都有个视频文件叫video.mp4

问题: 如何循环修改这些文件名, 比如修改为: video1.mp4, video2.mp4......然后存到一个文件夹, 比如文件夹c里?

虽然我用java写应该可以实现, 但是感觉太麻烦. 网上说貌似awk可以实现, 效率高, 不过重命名怎么做呢, 捣鼓半天也只能print出来, 或者有其他语言能高效完成的也行, 能有个实例就太感谢了~

感谢python版本的回答, 不过用awk怎么做呢?

阅读 4.6k
4 个回答

find -name 'video.mp4' | nl -w1 | sed 's/([0-9]+)t(./video.mp4)/2 c/video1.mp4/' | xargs -n 2 cp
sed那块拼字符串,用awk也能做到。

简单实现一个,假设a, b下只有一级子目录:

import glob
import shutil

index = 1
for dir in ['./a', './b']:
    for f in glob.glob('%s/*/video.mp4' % dir):
        shutil.copy(f, './c/video%d.mp4' % index)
        index += 1
#!/bin/bash
regex="mp4"
i=1
path=~/Desktop/video
find "." -type f | grep $regex |  while read line
do
    newName=$i-$name;
    cp $line $path/$newName;
    i=`expr $i + 1`;
done

自问自答, 写了个shell的实现, 和python差不多, 然而awk还是不太会用啊

生成测试数据

for i in `seq 100`;do mkdir -p a/$i b/$i && touch a/$i/video.mp4 b/$i/video.mp4;done

然后

i=1;for f in `find a b -type f -name video.mp4`;do mv $f c/$i-`basename $f`;i=`expr $i + 1`;done
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题