Мне нужно, чтобы скрипт bash для tar-файлов в каталоге. Файлы представляют собой .gz-файлы с соглашением об именах x.gz, где x - число, начинающееся с 1 и заканчивающееся на 100, мне нужно деформировать первую половину файлов. Как мне это сделать?скрипт bash для конкретных файлов в каталоге
ответ
Ваш вопрос немного неясен. Я предполагаю, что у вас есть x.gz, и вы хотите добавить 1.gz в 50.gz в tar-файл. Если это так:
tar cjf MyArchive.tar.bz2 {1..50}.gz
Вышеуказанная команда поставит первые 50 .gz файлы в архив с именем MyArchive.tar.bz2
Я понимаю, что у вас есть произвольное количество файлов с именем х. 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
Вот один из способов сделать это (используя 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
Вы не должны пытаться разобрать вывод ls. Кроме того, я не вижу здесь каких-либо специфических особенностей ksh. – jordanm
Я долгое время думал, что это хороший этикет, чтобы опубликовать этот комментарий, я не уверен, но вот он: я не совсем понимаю, почему мой ответ получает голос вниз? Разве не лучше, если бы кто-нибудь из комментариев высказался? Это действительно обескураживает. –
Я нашел ваш ответ полезным, хотя и сложным, я тоже не понимаю голоса. – user121196
@ user121196 то вы могли бы просто проголосовать за себя? –