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