Veja como eu abordaria isso. Como eu não tenho os mesmos arquivos, o código de exemplo abaixo tem como objetivo abrir 4 arquivos de texto com gedit
.
Como isso funciona? Bem, primeiro encontramos os arquivos no local codificado onde os arquivos podem ser armazenados ( FILEPATH
variable). Em seguida, passamos para while read
structure. Observe o uso de -print0
e IFS= read -d''
. Isso é muito comum na programação bash para eliminar nomes de arquivos problemáticos que contêm espaços, caracteres não imprimíveis, etc.
Cada gedit file &
chama gedit
sendo desanexado do script com &
. Isso faz com que o loop continue sem parar.
O que faz o loop parar é a variável COUNT. Uma vez que contamos de 0 a algum número divisível por 4, a variável MOD
, que é calculada a partir do operador de módulo, se tornará 0. Agora o shell aguardará um popup (que é zenity
) confirmar a geração de mais 4 janelas . Dessa forma nós contamos 4 vezes, resetar variável, continuar.
A única desvantagem aqui é que find
não classifica os arquivos, portanto eles não estarão necessariamente na ordem nomeada. Se a ordem é importante, o código precisará de instruções adicionais. Caso contrário, isso é suficiente.
#!/bin/bash
FILEPATH="/home/xieerqi/MYTEXTFILES"
COUNT=0
find $FILEPATH -type f -name "*.txt" -print0 | \
while IFS= read -d '' FILE;
do
gedit $FILE &
COUNT=$(( $COUNT+1 ))
MOD=$(( $COUNT % 4 ))
if [ $MOD -eq 0 ]
then
zenity --question --text "Open 4 more files?" || exit
fi
done