Supondo que você quis dizer:
find . -type f -name "img*_01.png" -print0 |
xargs -r0I{} python script.py -f {}
Isso não pode ser feito com xargs
, como em xargs
não tem operador rightTrim () . Você pode acabar com xargs
e fazer algo como ( bash
, zsh
syntax):
find . -type f -name "img*_01.png" -print0 |
while IFS= read -rd '' file; do
python script.py -f "${file%?????}"
done
Ou mantenha xargs
, mas invoque um shell para fazer o recorte:
find . -type f -name "img*_01.png" -print0 | xargs -r0 sh -c '
for file do
python script.py -f "${file%?????}"
done' sh
Embora, nesse caso, você também possa usar a sintaxe -exec {} +
padrão:
find . -type f -name "img*_01.png" -exec sh -c
for file do
python script.py -f "${file%?????}"
done' sh {} +
Ou (se você também não precisar do nome completo do arquivo), canalize a saída para algum comando que apare os últimos 5 caracteres de cada nome de arquivo:
sed -zE 's/.{5}$//' # assuming recent GNU sed
ou
awk -v RS='tr '\nperl -0 -pe 's/.{5}$//'
perl -0 -lpe 'chop;chop;chop;chop;chop'
perl -0 -lpe 'substr($_,-5,5,"")'
' 'find . -type f -name "img*_01.png" -print0 |
xargs -r0I{} python script.py -f {}
\n' | rev | cut -c 6- | rev | tr '\nfind . -type f -name "img*_01.png" -print0 |
while IFS= read -rd '' file; do
python script.py -f "${file%?????}"
done
' 'find . -type f -name "img*_01.png" -print0 | xargs -r0 sh -c '
for file do
python script.py -f "${file%?????}"
done' sh
\n'
' -v ORS='find . -type f -name "img*_01.png" -exec sh -c
for file do
python script.py -f "${file%?????}"
done' sh {} +
' '{print substr($0,1,length-5)}'
(assumindo o GNU awk
ou versões recentes do mawk
).
Nos sistemas GNU, você também pode fazer isso com utilitários básicos de uma tarefa com:
sed -zE 's/.{5}$//' # assuming recent GNU sed
E sempre há perl
:
awk -v RS='tr '\nperl -0 -pe 's/.{5}$//'
perl -0 -lpe 'chop;chop;chop;chop;chop'
perl -0 -lpe 'substr($_,-5,5,"")'
' '%pre%\n' | rev | cut -c 6- | rev | tr '\n%pre%' '%pre%\n'
' -v ORS='%pre%' '{print substr($0,1,length-5)}'