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 conheça o último que foi visualizado, então aplique o programa de visualização. Algo assim:

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

Como estou inspecionando manualmente esses conjuntos de dados, quero poder "Esc" do loop em qualquer ponto, para que eu interrompa o vizprogram e passe pelo loop novamente. Então, quando eu encontrar um arquivo que eu quero seguir, eu quero Ctrl + C e fazer 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 eu não posso fazer "Esc" no loop principal.

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

719016
fonte

Respostas:

1

E se vizprogram retorna verdadeiro se sair com ESC e falso se sair com Ctrl-C você pode 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: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Ole Tange
fonte
2

Crie um script de shell como o seguinte:

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

Então tem xargs execute:

echo "file file2 file3" | xargs /path/to/script.sh
Daniel Beck
fonte
Não tenho certeza do que você quer dizer com não pode fazer "Esc" . Ctrl-C funciona muito bem com a minha resposta. Deixe-me saber se eu perdi o ponto, vou apagá-lo então.
Daniel Beck
Eu uso "Esc" para interromper o vizprogram para arquivos que eu não quero seguir, mas então Ctrl + C para parar o loop quando eu encontrar um arquivo que eu quero inspecionar de perto. Eu gostaria de ter este arquivo marcado de alguma forma, e fazer um toque nele me daria o nome do arquivo sendo aquele com o último registro de data e hora.
719016
@avilella A menos que você edite vizprogram, não há como fazer isso além do que eu sugiro. Seu xargs correções de método vizprogram com todos os arquivos como argumentos, em ordem - você não pode intercalar outra coisa com uma única chamada de programa. Chamadas individuais para cada arquivo, semelhante ao que sugiro ou edito vizprogram são suas únicas opções que tenho medo (embora esteja ansioso para ser provado errado).
Daniel Beck