-
Uma abordagem seria fazer
for afile in a*x.txt do bfile=${afile/a/b}; bfile=${bfile/x.txt/y.txt} cfile=${afile/a/c}; cfile=${cfile/x.txt/z.txt} my_command "$afile" "$bfile" "$cfile" done
embora eu ache que não seja uma grande melhoria, e pode falhar em um caso patológico como um nome de arquivo de
afoox.txtbarx.txt
. Além disso, observe que isso é especificamente um recurso bash; pode não funcionar em outros shells compatíveis com POSIX (ao contrário de##
e%
, que são especificados por POSIX). -
É simples dizer
if [ -f "$bfile" ] then my_command "$afile" "$bfile" "$cfile" else echo Error fi
para capturar outliers de arquivos
a
(por exemplo,a17x.txt
sem correspondênciab17y.txt
). -
Se você colocar
for afile # with no list, defaults to "$@"; i.e., the script’s arguments do bfile=${afile/a/b}; bfile=${bfile/x.txt/y.txt} cfile=${afile/a/c}; cfile=${cfile/x.txt/z.txt} if [ -f "$bfile" ] then my_command "$afile" "$bfile" "$cfile" else echo Error fi done
em um script, você pode executar esse script com uma lista de
anumx.txt
nomes de arquivos como argumentos, e irá processá-los. Você pode então executar esse script por meio dexargs
ouparallel
. -
Verificando outliers de arquivos
b
(por exemplo,b42y.txt
sema42x.txt
correspondente) como parte do processo acima não é simples, mas é fácil fazer um loop separado:for bfile in b*y.txt do afile=${bfile/b/a}; afile=${afile/y.txt/x.txt} if [ ! -f "$afile" ] then echo Error fi done