В отличии от lsinitrd не только распаковывает, но и запаковывает
#!/bin/sh
#250402 sfs
( [ ! "$1" ] || [ "$1" = "--help" ] )  && echo "Use:
    $0 initramfs-linux.img (unpack)
    $0 dir [gz|lz|xz|zst] (pack ; zstd -default)" && exit 1

    i="`realpath "$1"`"
    b="`basename "$1" | awk -F. '{print $1}'`"
if [ -d "$1" ];then
    [ -f "$b"/initrd_early/early.cpio ] || e=1
    [ -d "$b"/initrd_main ] || e=1
    [ "$e" ] && cd "$1" || cd "$i"/initrd_main
    [ "$2" ] && x="$2" || x=zst
    [ -f "$1.$x" ] && ( dt="$(date +%y%m%d-%H%M)" && mv "$1.$x" "$1.$x"."$dt" || exit 1 )
  case "${x}" in
    "xz")  find . | cpio -o -H newc | xz -T0 --check=crc32 --x86 --lzma2 > "../$1.$x" ;;
    "gz")  find . | cpio -o -H newc | gzip -9 > "../$1.$x" ;;
    "lz")  find . | cpio -o -H newc | lzma -7 > "../$1.$x" ;;
    "zst") find . | cpio -o -H newc | zstd -f -18 > "../$1.$x" ;;
    *)  "$0" && exit 1 ;;
  esac
    [ ! "$e" ] && cd ../.. && cat "$b"/initrd_early/early.cpio "$b/$1.$x" > "$b"-custom.img
else
    U(){
        file -b ../"$f" |egrep '^gzip '  > /dev/null && zcat "../"$f""   | cpio -i -d
        file -b ../"$f" |egrep '^LZMA '  > /dev/null && cd .. && lzma -dc -S .lz  "$f" | cpio -i -d
        file -b ../"$f" |egrep '^XZ '    > /dev/null && xz -dc "../"$f"" | cpio -i -d
        file -b ../"$f" |egrep '^Zst'    > /dev/null && zstd -dc "../"$f"" | cpio -i -d
    }
    if [ "`file "$i" |grep "ASCII cpio archive"`" ]; then
        [ ! "`cpio -ivt < "$i" |head -1 |grep -E ' early_cpio$'`" ] && echo "No early_cpio" && exit 1
        c=`cpio -ivt < $i 2>&1 >/dev/null  | awk '{print $1}'` &&
                mkdir -p "$b"/initrd_early "$b"/initrd_main && cd "$b"/initrd_early &&
                dd if="$i" of=early.cpio bs=512 count=$c &&
                dd if="$i" of=main.img bs=512 skip=$c &&
                cd ../initrd_main && f=initrd_early/main.img && U
    else
        f="$1"
        mkdir "$b" && cd "$b" && U
    fi
PuppyRusArch (PRA)