xargs touch seguido pelo segundo comando

2

Eu estou selecionando aleatoriamente arquivos de um diretório que eu quero processar, e eu quero aplicar o comando touch a eles para que eu saiba o último que foi visualizado, então aplique o programa de visualização. Algo parecido com isto:

while [ 1 ]; do ls | shuf | xargs "touch & vizprogram"; done

Como estou inspecionando manualmente esses conjuntos de dados, quero poder "Esc" do loop a qualquer momento, para que eu interrompa o vizprogram e passe pelo loop novamente. Então, quando eu encontrar um arquivo que quero seguir, eu quero Ctrl + C e faço um ls -rt | tail -n 1 para ter o nome do último arquivo que usei. Eu tentei isso com um loop for ou while em vez de xargs , mas não consigo fazer "Esc" no loop principal.

Alguma idéia de como fazer o "toque então vizprogram" dentro de xargs?

    
por 719016 05.12.2011 / 08:10

2 respostas

1

Se vizprogram retornar verdadeiro se sair com ESC e falso se sair com Ctrl-C, você poderá fazer:

while ls | shuf | parallel --halt 2 -j1 "touch {}; vizprogram {}"; do true; done

Você pode instalar o GNU Parallel simplesmente por:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

Assista aos vídeos de introdução do GNU Parallel para saber mais: link

    
por 14.01.2012 / 21:23
2

Crie um script de shell como o seguinte:

#!/usr/bin/env bash
while [ $# -gt 0 ]
do
    touch "$1"
    vizprogram "$1"
    shift
done

Em seguida, execute xargs :

echo "file file2 file3" | xargs /path/to/script.sh
    
por 05.12.2011 / 08:21

Tags