2012-01-17 101 views

回答

6

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

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

上面的命令将会把前50个.gz文件到一个名为MyArchive.tar.bz2

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 
+0

我想了一会儿是否是好的礼仪发表此评论,我不确定,但在这里它:我不明白为什么我的答案得到一个投票下来?如果下来的选民发表任何评论,会不会更好?这真是令人沮丧。 – 2012-01-17 21:10:40

+0

我发现你的答案虽然复杂,但我也不明白投票的结果。 – user121196 2012-01-18 01:50:18

+0

@ user121196那么你可以自己投票呢? – 2012-01-18 08:36:38

-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 
+0

您不应该尝试解析ls的输出。另外,我在这里看不到任何ksh特定的功能。 – jordanm 2012-01-17 20:37:39

相关问题