Comando de leitura interativamente em um loop for

0

Gostaria de excluir alguns arquivos mp3 de maneira interativa da seguinte forma

$ for i in *.mp3; do mplayer "$i"; echo "$i"; sleep 5; interactive_code; done

O interactive_code deve excluir o arquivo "$ i" quando eu pressionar rm , mova-o para tmp dir quando eu pressionar mv ou continuar em um loop quando eu pressionar espaço.

    
por xralf 01.09.2017 / 02:53

3 respostas

3

Este script deve fazer o trabalho:

#!/usr/bin/env bash

for i in ./*.mp3; do

  mplayer "${i}"
  printf '%s\n' "${i}"

  read -p 'What to do?: ' -r ans

  if [[ "${ans}" == 'rm' ]]; then
    rm "${i}"
  elif [[ "${ans}" == 'mv' ]]; then
    mv "${i}" 'tmp'
  fi

done

PS: Ele supõe que o diretório tmp já exista e esteja em seu diretório de trabalho atual. Se estiver em outro local ou você estiver consultando o diretório /tmp , apenas altere essa parte do código.

    
por 01.09.2017 / 08:15
1

Não testado. Isso não é bem o que você pediu, pois dá dois avisos. Digite 'y' e pressione enter no prompt primeiro para mover o arquivo para /tmp (caso em que o segundo prompt é ignorado), ou passe 'y' para o segundo prompt para remover o arquivo. Ignore os dois prompts (pressione enter) para continuar sem ação.

find *.mp3 -type f -exec mplayer {} \; \( \
  -ok mv -i {} /tmp \; -o \
  -ok rm {} \; \)
    
por 01.09.2017 / 08:17
0

Isso dá ao usuário um menu depois de reproduzir um arquivo:

TMPDIR=${TMPDIR:-/tmp}

for name in ./*.mp3; do
    test -f "$name" || continue

    printf 'Playing "%s"...\n' "$name"
    mplayer "$name"

    select ch in "Move $name to $TMPDIR" "Remove $name"; do
        case "$REPLY" in
            1)  mv "$name" "$TMPDIR" ;;
            2)  rm "$name" ;;
            *)  echo 'Invalid choice' >&2
                continue ;;
        esac
        break
    done
done

Este script não requer bash , qualquer sh shell deve fazer.

    
por 03.09.2017 / 20:19