在linux中提取tar时重命名tar.gz中的目录

时间:2013-09-03 16:58:13

标签: shell unix

我有一个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脚本重命名?

3 个答案:

答案 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