Seu comando
$ find . -name 'segment*' | xargs -n1 -P4 sh someFunction.sh
tem o efeito de que, no máximo, quatro cópias do script de shell someFunction.sh serão iniciadas ( -P 4 ) em paralelo (novas serão geradas assim que as antigas forem concluídas), cada uma obtendo um nome de arquivo como seu argumento ( -n 1 ).
Isso significa que cada chamada do seu script será parecida com
sh someFunction.sh segmentsomething
Dentro do script, o shell colocará os valores dos parâmetros posicionais (os argumentos na linha de comando) em $1 , $2 etc. ( $0 geralmente contém o nome do próprio script). No seu caso, $1 conterá o nome do arquivo e os outros estarão vazios.
Então, no script:
filename="$1"
echo "$filename"
cat "$filename"
É isso. Agora, geralmente quando alguém usa find para procurar por arquivos e passar seus nomes de arquivos para xargs , há o problema com nomes de arquivos que as pessoas tendem a lembrar uns dos outros, e eu farei isso aqui também.
O utilitário find passa nomes de arquivos separados por espaço em branco. Isso não é bom se você tiver nomes de arquivos com espaços, pois isso causaria problemas para xargs invocar seu script com nomes próprios.
Portanto, é uma boa prática sempre usar -print0 com find e -0 com xargs , o que significa que os nomes dos arquivos, em vez de separados por espaços, são separados por nul caracteres ( %code% ). Isso torna muito mais seguro.
Assim:
$ find . -name 'segment*' -print0 | xargs -0 -n1 -P4 sh someFunction.sh