重命名大量文件

时间:2014-07-05 07:28:27

标签: python awk sed

我有很多文件,例如med_001.txt,med_002.txt,...,med_020.txt。

我怎样才能将文件名分别更改为med_021.txt,med_022.txt,...,med_040.txt?

我使用'mv'或'rename'命令,但这很乏味。

3 个答案:

答案 0 :(得分:1)

在Python中。

此脚本首先将重命名的文件从当前目录移动到临时目录(由脚本创建),然后将它们移回当前目录。如果在同一目录中执行移动,例如,这可以避免可能的覆盖。如果文件med_001.txt和med_021.txt存在,则将med_001.txt重命名为med_021.txt将导致原始med_021.txt的废弃。

import os
import shutil
from glob import glob
from tempfile import mkdtemp

GLOB_PATTERN = 'med_[0-9][0-9][0-9].txt'

# move renamed files to temporary directory
temp_dir = mkdtemp()
for f in glob(GLOB_PATTERN):
    new_filename = 'med_%03d.txt' % (int(f[-7:-4])+20)    # very specific to this question - could use regex instead
    shutil.move(f, os.path.join(temp_dir, new_filename))

for f in glob(os.path.join(temp_dir, '*')):
    shutil.move(f, '.') # move back to current directory

# clean up
os.rmdir(temp_dir)

答案 1 :(得分:0)

这个脚本应该可以解决问题:

#!/bin/bash
set -o noclobber
mkdir tmp$$
for i in med_*.txt
do
   [[ $i =~ med_[0]*([1-9][0-9]*).txt ]]
   s=${BASH_REMATCH[1]}
   let s+=20
   cmd=$(printf "mv $i tmp$$/med_%03d.txt" $s)
   $($cmd)
done
for i in tmp$$/*.txt
do
   $(mv $i .)
done
rmdir tmp$$

答案 2 :(得分:0)

一个简单的命令怎么样?

for i in 1 2 3;do let j=$i+20;mv med_00${i}.txt med_0${j}.txt;done