我正在尝试编写一个脚本来获取md5sum
cli 中目录内的唯一文件或多个文件,使用它pv
来查看进度条,并在 gtk 中编写一个脚本,因为我在zenity
.
好吧,我不让它发挥作用的事情是:
zenity
进步。我在过去 12 小时内尝试了一种方法,将 的百分比以相反的顺序重定向
pv
到文件,并在循环中使用 后,等待新行添加到文件中以供使用,以使进度条移动。/tmp/zenity.prg
tac
cat
sleep 1
/tmp/zenity.prg
zenity
这个想法是使用 Gnome 网站 Zenity 的示例:
( echo "10" ; sleep 1 echo "# Updating mail logs" ; sleep 1 echo "20" ; sleep 1 echo "# Resetting cron jobs" ; sleep 1 echo "50" ; sleep 1 echo "This line will just be ignored" ; sleep 1 echo "75" ; sleep 1 echo "# Rebooting system" ; sleep 1 echo "100" ; sleep 1 ) | zenity --progress \ --title="Update System Logs" \ --text="Scanning mail logs..." \ --percentage=0 if [ "$?" = -1 ] ; then zenity --error \ --text="Update canceled." fi
我在 xfce 上找到的一部分代码(如果我没有错过但等于这部分代码对我不起作用),即针对多个文件。
嗯,我现在的代码是这样的:
#!/usr/bin/env bash echo ' Autor ----------------> Inukaze ( Venezuela ) Sitio ----------------> https://goo.gl/ij6WqW Correo-E -------------> [email protected] Licencia -------------> GPL 2' #Variables Principales Archivo="$@" Cantidad=$(ls "$Archivo" | wc | awk '{print $1}') #Determinar Cantidad de Objetos if [[ $Cantidad -eq 1 ]]; then Cantidad=$Cantidad fi if [[ $Cantidad -gt 1 ]]; then Cantidad=$(ls "$PWD" | wc | awk '{print $1}') fi hash zenity 2>/dev/null if [[ $? != 0 ]]; then echo "Zenity no esta instalado!" echo "Por favor instale Zenity" exit 1 fi if [[ "$Cantidad" = "0" ]]; then zenity --error --text="Nada para calcular!" fi if [[ $Cantidad -eq 1 ]]; then (for Unico in "$Archivo"; do pv -- "$Unico" | md5sum | tee >(cut -d ' ' -f1 > /tmp/sumd5) | sed 's/-$//' | printf '%s%s\n' "$(cat -)" "$Unico" sed -n 'H; 1h; $!d; g; s/\\/\\\\/g; s/\n/\\n/g; t x; p; q; :x s/^/\\/; p;' done) & #Zenity (while [ -f /tmp/zenity.prg ] do cat "/tmp/zenity.prg" ; sleep 1 done) | zenity --progress --title="Suma de Integridad MD5" --text="Calculando MD5 de:\n${Archivo##*/}" --percentage=0 --auto-close 2>&1 | #Zenity if [ "$?" = -1 ] ; then zenity --error --text="Proceso Cancelado por el Usuario." rm -rf /tmp/sumd5 rm -rf /tmp/zenity.prg exit 0 fi sumd5=`cat /tmp/sumd5` zenity --info --title="Suma de Integridad MD5" --text="$sumd5\n\nArchivo:\n${Archivo##*/}" rm -rf /tmp/sumd5 rm -rf /tmp/zenity.prg exit 0 fi if [[ $Cantidad -gt 1 ]]; then if zenity --question --title="MD5sum" \ --text="Seleccion Multiple.\nEsto creara/reemplazara un archivo llamado <b>multiples.md5</b>\nen el directorio donde estan estos archivos.\n¿Desea Continuar?" \ --no-wrap then > multiples.md5 i=0 TOTAL="$Cuenta" while read -r line || [[ -n "$line" ]]; do ((++i)) PERCENT=$(($i*100/${TOTAL})) echo "#md5sum $i/$TOTAL: $line" md5sum "${line}" >> multiples.md5 2>&1 echo "$PERCENT" done < "$Archivo" | zenity --progress --title="MD5" --auto-close exo-open 'multiples.md5' || zenity --text-info --title="Sumas de Integridad : MD5" < multiples.md5 fi fi
该脚本的主要思想只是与上下文菜单一起使用,但我更喜欢让脚本可以在没有文件管理器的情况下工作,例如:Thunar、Caja、Nautilus、Dolphin。