Script que descompacta um initrd, permite a edição do preseed.cfg e o empacota para o cpio e gzip novamente

2

Eu quero programar um script que permita o que é dito no título. Então basicamente eu gunzip o initrd, do que descompactar o cpio, abra o vi para permitir a edição, salvar, empacotar com cpio e gzip novamente, então nada extravagante aqui (pelo menos eu espero que, eu sou não é bom em scripts de shell). Agora, após gunzipar o arquivo, o arquivo .gzip ou .gz final é omitido, então não posso usar $ 1 como nome. Como devo excluir o final para que eu possa usar uma nova variável foo, para processamento posterior?

Esta provavelmente não é uma maneira muito elegante, mas espero que funcione:)

#/bin/bash
# This script should make it possible to edit the preseed file
# within a initrd gzipped cpio archive, without unpacking and packing it
# manually


mkdir temporarydirectory
# $1 will be the initrd (cpio archive which is compressed with gzip)
mv $1 temporarydirectory
cd temporarydirectory
gunzip $1
cpio -id < $1 # here is where i need to cut of the gzip ending
rm $1 # again without the gzip ending cutted of
vim preseed.cfg
find . | cpio -H newc -o > $1 # again without gzip ending
gzip $1 # here the same
mv $1 .. # here the gzip ending is used again
cd ..
rm -r temporarydirectory
    
por Rob 06.01.2012 / 00:44

2 respostas

0

Veja o Expansão do parâmetro docs. Remover uma extensão é bastante comum, você pode fazer isso com:

...
file=$1
cpiofile=${file%.*}
...
gunzip $file
cpio -id < $cpiofile
...

(A substituição dos parâmetros posicionais por nomes de variáveis adequados facilitará a leitura e a manutenção do seu script, especialmente se em algum momento você quiser adicionar ou alterar a ordem dos parâmetros.)

    
por 06.01.2012 / 07:44
0

Eu mudaria as próximas linhas

gunzip $1
cpio -id < $1 

para

gzip -dc $1|cpio -id

e

mv $1 ..

para

mv ${1}.gz ../$1

    
por 05.03.2015 / 22:03