Shell 在linux中提取tar时重命名tar.gz中的目录
我有一个tarball索引.tar.gz。里面有这样的目录 索引1/db\u新时间\u旧时间\u 0Shell 在linux中提取tar时重命名tar.gz中的目录,shell,unix,Shell,Unix,我有一个tarball索引.tar.gz。里面有这样的目录 索引1/db\u新时间\u旧时间\u 0 索引1/db\u新时间\u旧时间\u 1 索引1/db\u新时间\u旧时间\u 2 Index2/db\u newtime\u oldtime\u 0 Index2/db\u新时间\u旧时间\u 1 Index2/db\u新时间\u旧时间\u 2 在提取tar文件时,我想在db目录名的末尾添加99,并加上数字值。 所以在提取之后,目录结构应该是这样的 Index1/db\u新时间\u旧时间\u
索引1/db\u新时间\u旧时间\u 1
索引1/db\u新时间\u旧时间\u 2
Index2/db\u newtime\u oldtime\u 0
Index2/db\u新时间\u旧时间\u 1
Index2/db\u新时间\u旧时间\u 2 在提取tar文件时,我想在db目录名的末尾添加99,并加上数字值。 所以在提取之后,目录结构应该是这样的 Index1/db\u新时间\u旧时间\u 99
索引1/db\u新时间\u旧时间\u 100
索引1/db\u新时间\u旧时间\u 101
Index2/db\u新时间\u旧时间\u 99
Index2/db\u新时间\u旧时间\u 100
Index2/db\u新时间\u旧时间\u 101
那么,可以使用shell脚本像这样重命名吗?在提取tar ball之后,您只需重命名
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
我们来测试一下。如果没有错过任何东西,而焦油压缩
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支持数学:)使用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
,如果它似乎已经工作正常