bash脚本来tar目录中的特定文件

时间:2012-01-17 18:57:24

标签: bash tar

我需要使用bash脚本来tar目录中的一半文件。文件是.gz文件,命名约定为x.gz,其中x是从1开始的数字,以100结尾,我需要tar文件的前半部分。我该怎么做?

3 个答案:

答案 0 :(得分:6)

你的问题有点不清楚。我假设您有x.gz,并且想要将1.gz添加到50.gz到tar文件中。如果是这样的话:

tar cjf MyArchive.tar.bz2 {1..50}.gz

上面的命令会将前50个.gz文件放入名为MyArchive.tar.bz2的存档中

答案 1 :(得分:0)

我知道您在当前目录中有任意数量的名为x.gz的文件。你想要焦油中的一半。

但是从答案中可以看出,你的描述不够详细。

我试图提供最灵活的。

files=`find . -maxdepth 1 -mindepth 1 -type f -printf '%f\n'|grep -P '^\d+.gz$'|sort -n`

n=`echo $files|sed "s/ /\n/g"|wc -l`
half=$(( $n / 2 ))
d=`echo $files|sed "s/ /\n/g"|head -$half`

tar czf archive.tar.gz $d

答案 2 :(得分:-1)

这是实现此目的的一种方法(使用KSH,应该可以在BASH的任何地方使用)

将以下脚本保存在x.sh和chmod + x x.sh中;然后运行它

#!/bin/ksh
#
#

## first create 100 dummy GZ files
##

x=0
while :
do
        x=$((${x}+1));
        if [ x -gt 100 ]; then
                break;
        fi
        touch ${x}.gz;
done

## next parse the list, sort it and loop tar it stopping at 50.gz
##
for x in `ls *.gz | sed 's/\.gz//g' | sort -n`
do
        if [ $x -gt 50 ]; then
                exit 0;
        fi
        tar -rvf all-50.tar ${x}.gz
done