0

我有一个压缩包 Index.tar.gz。在里面我有这样的目录

Index1
/db_newtime_oldtime_0 Index1 /db_newtime_oldtime_1 Index1
/db_newtime_oldtime_2
Index2/db_newtime_oldtime_0
Index2/db_newtime_oldtime_1
Index2/db_newtime_oldtime_2

在提取 tar 文件时,我想在 db 目录名称的末尾添加 99 和数值。所以解压后的目录结构应该是这样的

Index1
/db_newtime_oldtime_99 Index1 /db_newtime_oldtime_100 Index1
/db_newtime_oldtime_101
Index2/db_newtime_oldtime_99
Index2/db_newtime_oldtime_100
Index2/db_newtime_oldtime_101

那么是否可以通过使用 shell 脚本来重命名呢?

4

3 回答 3

0

要去测试这个。如果在 tar-gzip 压缩时没有遗漏任何东西......

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 支持数学 :)

于 2013-09-03T17:33:54.453 回答
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
于 2013-09-03T17:24:55.163 回答
0

使用重击:

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

于 2013-09-03T19:04:14.780 回答