我有一个tarball Index.tar.gz。在里面,我有这样的目录
的Index1 / db_newtime_oldtime_0
指数1 / db_newtime_oldtime_1
指数1 / db_newtime_oldtime_2
索引2 / db_newtime_oldtime_0
索引2 / db_newtime_oldtime_1
Index2 / db_newtime_oldtime_2
在提取tar文件时,我想在db目录名的末尾添加99和数值。 因此,在提取之后,目录结构应该像这样
的Index1 / db_newtime_oldtime_99
指数1 / db_newtime_oldtime_100
指数1 / db_newtime_oldtime_101
索引2 / db_newtime_oldtime_99
索引2 / db_newtime_oldtime_100
Index2 / db_newtime_oldtime_101
是否可以使用shell脚本重命名?
答案 0 :(得分:0)
提取tar球后,您只需重命名index*/
内的每个目录名称...
您可以使用for循环来执行此操作:
for i in $(\ls -d index*/*);
do
dst=$(echo "$i" | sed -e 's/oldtime_/oldtime_ /g' | awk '{print $1$2+99}');
mv "$i" "$dst";
done
答案 1 :(得分:0)
去测试一下。如果没有错过什么,而tar-gzipping ....
tar -C ./tmp -xvf ./Index.tar.gz
find ./tmp -name "[a-zA-Z_][0-9]" | sed s/([a-zA-Z])([0-9])/\1 \2 | awk '{print "mv "$1$2" "$1$2+99}'
cd ./tmp && tar -zxf ../Index.tar.gz . && cd ../ && rm -rf ./tmp
注意: 是的,AWK支持数学:)
答案 2 :(得分:0)
使用Bash:
tar -vxf Index.tar.gz | (
R='^(.*[^0-9])([0-9]+)$'
read A
while [[ -n $A ]]; do
read B
[[ $A =~ $R ]] && echo mv "$A" "${BASH_REMATCH[1]}$(( BASH_REMATCH[2] + 99 ))"
A=$B
done
)
注意:-v
很重要。如果它似乎运行良好,请移除echo
附近的mv
。