使用 md5sum 的 PV 和 Zenity 进度条

使用 md5sum 的 PV 和 Zenity 进度条

我正在尝试编写一个脚本来获取md5sumcli 中目录内的唯一文件或多个文件,使用它pv来查看进度条,并在 gtk 中编写一个脚本,因为我在zenity.

好吧,我不让它发挥作用的事情是:

  1. zenity进步。

    我在过去 12 小时内尝试了一种方法,将 的百分比以相反的顺序重定向pv到文件,并在循环中使用 后,等待新行添加到文件中以供使用,以使进度条移动。/tmp/zenity.prgtaccatsleep 1/tmp/zenity.prgzenity

    这个想法是使用 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
    
  2. 我在 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。

相关内容