initrd의 압축을 풀고 preseed.cfg를 편집하여 cpio 및 gzip으로 다시 패키징하는 스크립트

initrd의 압축을 풀고 preseed.cfg를 편집하여 cpio 및 gzip으로 다시 패키징하는 스크립트

제목에 적힌 내용을 수행하는 스크립트를 작성하고 싶습니다. 따라서 기본적으로 initrd를 압축한 다음 cpio의 압축을 풀고 편집을 위해 vi를 열고 저장하고 cpio로 패키징한 다음 다시 gzip을 사용하므로 여기에는 멋진 것이 없습니다(적어도 그러기를 바랍니다. 저는 쉘 스크립팅에 능숙하지 않습니다). 이제 아카이브를 총 압축한 후 후행 .gzip 또는 .gz가 생략되므로 $1을 이름으로 사용할 수 없습니다. 추가 처리를 위해 새 변수 foo를 사용할 수 있도록 결말을 어떻게 제거해야 합니까?

이것은 매우 우아한 방법은 아니지만 효과가 있기를 바랍니다 :)

#/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

답변1

난교를 봐매개변수 확장문서. 확장 프로그램을 제거하는 것은 매우 일반적이며 다음과 같은 방법으로 제거할 수 있습니다.

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

(위치 매개변수를 올바른 변수 이름으로 바꾸면 특히 매개변수의 순서를 추가하거나 변경하려는 경우 스크립트를 더 쉽게 읽고 유지 관리할 수 있습니다.)

답변2

다음 줄을 바꾸겠습니다

gunzip $1
cpio -id < $1 

~을 위한

gzip -dc $1|cpio -id

그리고

mv $1 ..

~을 위한

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

관련 정보