您好,我正在尝试制作一个使用 cdemu 来安装映像的脚本(因为 gcdemu 永远不适合我)。
我正在尝试列出支持的格式
$ cdemu enum-parsers
Supported parsers:
PARSER-MDX: MDX Image Parser
application/x-mdx: DaemonTools images (*.mdx, *.mds)
PARSER-HD: Hard-disk Image Parser
application/x-apple-diskimage: Apple Disk image (*.cdr)
application/x-apple-diskimage: Apple Disk image (*.smi)
application/x-apple-diskimage: Apple Disk image (*.img)
PARSER-READCD: READCD Image Parser
application/x-cd-image: readcd images (*.toc)
PARSER-ISO: ISO Image Parser
application/x-cd-image: ISO images (*.iso, *.bin, *.img)
audio/x-wav: WAV audio files (*.wav)
PARSER-XCDROAST: X-CD-Roast Image Parser
application/x-xcdroast: X-CD-Roast images (*.toc)
PARSER-CCD: CCD Image Parser
application/x-ccd: CloneCD images (*.ccd)
PARSER-C2D: C2D Image Parser
application/x-c2d: WinOnCD images (*.c2d)
PARSER-CDI: CDI Image Parser
application/x-cdi: DiscJuggler images (*.cdi)
PARSER-B6T: B6T Image Parser
application/x-b6t: BlindWrite 5/6 images (*.b5t, *.b6t)
PARSER-NRG: NRG Image Parser
application/x-nrg: Nero Burning Rom images (*.nrg)
PARSER-CUE: CUE Image Parser
application/x-cue: CUE images (*.cue)
PARSER-TOC: TOC Image Parser
application/x-cdrdao-toc: cdrdao images (*.toc)
PARSER-MDS: MDS Image Parser
application/x-mds: Alchohol 120% images (*.mds)
application/x-xmd: GameJack images (*.xmd)
PARSER-CIF: CIF Image Parser
application/x-cif: Adaptec Easy CD/DVD Creator images (*.cif)
我需要提取支持的格式列表并将其放入新数组中,例如
SuportedFormats=(
mdx
mds
cdr
smi
img
toc
ccd
c2d
cdi
b5t
b6t
nrg
cue
xmd
cif)
但格式列表可能会根据 cdemu 的版本而变化。
另一件事我想将大写扩展名更改为小写。我尝试与
tr '[:upper:]' '[:lower:]' "${1##*.}"
但我现在不知道如何使用它
答案1
要获取文件扩展名列表(需要 GNU grep):
$ cdemu enum-parsers | grep -oP '(?<=\*\.)[^,)]*'
mdx
mds
cdr
smi
img
toc
iso
bin
img
wav
toc
ccd
c2d
cdi
b5t
b6t
nrg
cue
toc
mds
xmd
cif
要将这些扩展放入数组中:
$ SupportedFormats=($(cdemu enum-parsers | grep -oP '(?<=\*\.)[^,)]*'))
要验证我们是否拥有正确的数组,请运行declare -p
:
$ declare -p SupportedFormats
declare -a SupportedFormats=([0]="mdx" [1]="mds" [2]="cdr" [3]="smi" [4]="img" [5]="toc" [6]="iso" [7]="bin" [8]="img" [9]="wav" [10]="toc" [11]="ccd" [12]="c2d" [13]="cdi" [14]="b5t" [15]="b6t" [16]="nrg" [17]="cue" [18]="toc" [19]="mds" [20]="xmd" [21]="cif")
转换为小写
您的示例中的所有扩展名都是小写的。如果您确实需要转换为小写,您可以使用tr
:
SupportedFormats=($(cdemu enum-parsers | grep -oP '(?<=\*\.)[^,)]*' | tr '[:upper:]' '[:lower:]'))
tr
不是 unicode 安全的。如果您的字符串有 unicode,那么sed
是更好的选择(需要 GNU sed):
SupportedFormats=($(cdemu enum-parsers | grep -oP '(?<=\*\.)[^,)]*' | sed -E 's/[[:upper:]]/\L&/g'))
答案2
好吧,我尝试制作我的脚本,适用于 Xfce 4.12 和 Thunar,但不起作用
#!/usr/bin/env bash
echo '
Autor ----------------> Inukaze ( Venezuela )
Sitio ----------------> inukaze.wordpress.com
Correo-E -------------> [email protected]
Licencia -------------> GPL 2
******* Inicio : Acerca de este Script ********
Este Mini-Script es para poder Montar
Imagen(es) de Disco(s) Compacto(s)
de forma sencilla. sin necesidad
del fallido "gcdemu" (Solo me da errores)
******** Fin : Acerca de este Script **********'
# NOTAS
#
# 1 - Verificar el Demonio
# 2 - Verificar que existe por lo menos una unidad virtual, en caso de que no, crear una
# 3 - En caso de que si exista, pero ya este montada una imagen, desmontar la imagen para montar la más nueva
#
# Patron de "Imagen" y "Otros Archivos" para Thunar :
# *.mdx;*.mds;*.cdr;*.smi;*.img;*.toc;*.ccd;*.c2d;*.cdi;*.b5t;*.b6t;*.nrg;*.cue;*.xmd;*.cif;*.iso
# Asegurarse de que el demonio esta en ejecucion
DEMONIO=$(ps -A | grep cdemu-daemon | awk '{print $1}')
if [ "$DEMONIO" == "$(pgrep cdemu-daemon)" ] ; then
DEMONIO=$(echo "Demonio cargado y funcionando") ; echo "$DEMONIO"
else zenity --error --text 'El Demonio "cdemu" no esta cargado, Abortando.'; exit 1
fi
FormatoSoportado=($(cdemu enum-parsers | grep -oP '(?<=\*\.)[^,)]*'))
declare -p FormatoSoportado 2&>/dev/null
#Minusculas=$(sed -E 's/[[:upper:]]/\L&/g')
# Comprobar que existe por lo menos un dispositivo virtual, si no existe crear uno
DISPOSITIVO=$(cdemu --bus session status | grep "0" | tail -n1 | awk '{print $1}')
if [ ! $DISPOSITIVO ]; then
cdemu add-device
fi
DISPOSITIVO=$(cdemu --bus session status | grep -E 'LOADED|True' | awk '$2=="True"' | awk '{print $2}')
if [ "$DISPOSITIVO" == "True" ]; then
#ARCHIVO=$(cdemu --bus session status | awk '{ print $3 $6 }' | tail -n1)
cdemu unload 0
#zenity --error --text "No puedes cargar más imagenes. Dispositivo Ocupado.\n$ARCHIVO"; exit 1
fi
DISPOSITIVO=$(cdemu --bus session status | grep -E 'LOADED|False' | awk '$2=="False"' | awk '{print $2}')
if [ "$DIPOSITIVO" == "False" ]; then
NOMBRE="$(basename "$@")"
NOMBRE=$(echo "$NOMBRE" | sed 's/[*.*].*//')
RUTA=$(echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1"))
cdemu load 0 "$NOMBRE.${#FormatoSoportado[@]}"
fi
我的想法很简单
- 检查 cdemu-daemon 是否正在运行
- 如果没有创建,则检查是否存在一台设备
- 如果设备存在,检查是否挂载了镜像,卸载镜像
- 挂载最新的映像