menu de diálogo para exibir arquivos, selecione um deles e então apague-o

1

Eu quero poder exibir arquivos em um determinado diretório, selecionar um dos arquivos e poder excluí-lo.

Aqui está o que eu encontrei até agora. Alguém pode ajudar?

let i=0 # define counting variable
W=() # define working array
while read -r line; do # process file by file
    let i=$i+1
    W+=($i "$line")
done < <( ls -1 /home/admin/Desktop )
FILE=$(dialog --title "List file of directory /home" --menu "Chose one" 24 80 17 "${W[@]}" 3>&2 2>&1 1>&3) # show dialog and store output
clear
if [ $? -eq 0 ]; then # Exit with OK
    readlink -f $(ls -1 /home | sed -n "'echo "$FILE p" | sed 's/ //''")
fi
    
por NickG95 14.03.2016 / 10:50

1 resposta

0

O script usa o valor de retorno de dialog para selecionar um item de uma lista de arquivos (ou diretórios) em um determinado diretório de origem.

O problema com o script bash é que ele usa dois valores de diretório diferentes :

let i=0 # define counting variable
W=() # define working array
while read -r line; do # process file by file
    let i=$i+1
    W+=($i "$line")
done < <( ls -1 /home/admin/Desktop )
FILE=$(dialog --title "List file of directory /home" --menu "Chose one" 24 80 17 "${W[@]}" 3>&2 2>&1 1>&3) # show dialog and store output
clear
if [ $? -eq 0 ]; then # Exit with OK
    readlink -f $(ls -1 /home | sed -n "'echo "$FILE p" | sed 's/ //''")
fi

Esses são /home/admin/Desktop e /home . A prática usual faria deles um símbolo (ou seja, uma variável) e eliminaria a inconsistência:

#!/bin/bash
source=/home/admin/desktop 
let i=0 # define counting variable
W=() # define working array
while read -r line; do # process file by file
    let i=$i+1
    W+=($i "$line")
done < <( ls -1 $source )
FILE=$(dialog --title "List file of directory $source" --menu "Chose one" 24 80 17 "${W[@]}" 3>&2 2>&1 1>&3) # show dialog and store output
clear
if [ $? -eq 0 ]; then # Exit with OK
    readlink -f $source/$(ls -1 $source | sed -n "'echo "$FILE p" | sed 's/ //''")
fi

Feito isso, o resultado de readlink seria utilizável.

O script com essa correção está incompleto:

  • na verdade, não remove um arquivo
  • ele não verifica se o item a ser removido é um arquivo ou um diretório
  • usando a saída de ls (duas vezes!) não é a melhor maneira de obter uma listagem
por 04.10.2016 / 00:29