我有很多文件,例如med_001.txt,med_002.txt,...,med_020.txt。
我怎样才能将文件名分别更改为med_021.txt,med_022.txt,...,med_040.txt?
我使用'mv'或'rename'命令,但这很乏味。
答案 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