2012-01-17 2 views
2

Мне нужно, чтобы скрипт bash для tar-файлов в каталоге. Файлы представляют собой .gz-файлы с соглашением об именах x.gz, где x - число, начинающееся с 1 и заканчивающееся на 100, мне нужно деформировать первую половину файлов. Как мне это сделать?скрипт bash для конкретных файлов в каталоге

ответ

6

Ваш вопрос немного неясен. Я предполагаю, что у вас есть x.gz, и вы хотите добавить 1.gz в 50.gz в tar-файл. Если это так:

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

Вышеуказанная команда поставит первые 50 .gz файлы в архив с именем MyArchive.tar.bz2

0

Я понимаю, что у вас есть произвольное количество файлов с именем х. 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

Я долгое время думал, что это хороший этикет, чтобы опубликовать этот комментарий, я не уверен, но вот он: я не совсем понимаю, почему мой ответ получает голос вниз? Разве не лучше, если бы кто-нибудь из комментариев высказался? Это действительно обескураживает. –

+0

Я нашел ваш ответ полезным, хотя и сложным, я тоже не понимаю голоса. – user121196

+0

@ user121196 то вы могли бы просто проголосовать за себя? –

-1

Вот один из способов сделать это (используя KSH, которые должны быть доступны в любом месте Баш)

сохранить ниже сценарий в x.sh и CHMOD + х 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