在linux重命名多个文件与数字加上一个常数
问题描述:
我想在其名称中的数字文件夹中的所有文件重命名,像在linux重命名多个文件与数字加上一个常数
- Solution_01.vtu
- Solution_02.vtu
- Solution_03。 VTU ...
是
- Solution_201.vtu
- Solution_202.vtu
- Solution_203.vtu ...
其中可以指定附加的常数(此处200)。
我试着沿该线的东西提出在Renaming a set of files to 001, 002, ... on Linux
i=200; temp=$(mktemp -p .); for file in solution_*.vtu
do
mv "$file" $temp;
mv $temp $(printf "solution_%0.3d.vtu" $i)
i = $((i+1))
done
但这并不为我工作。谢谢你的帮助!
答
你可以用这个命令试试:
find . -printf 'mv %f %f\n' | grep -v '\. \.' | sed 's/u Solution_/u Solution_2/g' | while read -r i ; do $i ; done
+0
谢谢你你的回答,但这不是我所期望的,因为这只是额外的2。如果我有Solution_200.vtu Solution_201.vtu,我将得到Solution_2200.vtu Solution_2201.vtu,而不是Solution_400.vtu,Solution_401.vtu,这是我真正需要的。 – Littlemouse 2015-02-10 11:58:47
答
如果你有你的Linux机器上的红宝石:
#! /usr/bin/env ruby
require 'fileutils'
pattern = ARGV[0] || "*.vtu"
offset = (ARGV[1] || 200).to_i
Dir[pattern].each do |file|
id = file[/\d+/]
if id then
new_id = id.to_i + offset
new_file = file.sub(/\d+/, new_id.to_s)
puts "#{file} -> #{new_file}"
## UNCOMMENT THIS LINE IF YOU WANT TO MOVE FILES:
# FileUtils.mv file, new_file
end
end
您可以使用它像这样:
./rename_with_integer_offset.rb "*.vtu" 200
# solution_201.vtu -> solution_401.vtu
# solution_202.vtu -> solution_402.vtu
分享一些代码你在这一点上试过了,并解释你被卡住的原因,因为我们不会为你完成整个脚本 – 2015-02-10 10:39:04