Você errou de duas maneiras:
-
Você está passando nomes de arquivos semi-arbitrários de
finda dois canais - paraxargse, em seguida, parasort. Use-print0com terminação nula defind, se possível, ou incorpore as ações dentro de-exec, como maulinglawns demonstrou . -
SE você tinha nomes de arquivos que nunca continham caracteres de
$IFS, seu comando ainda falhava porque você pediu axargspara executar o eco com uma substituição de comando; essa substituição de comando solicitabasenamepara gerar o nome base de@, o que provavelmente não existe. Mais perto teria sido:find /long/absolute/path -type f | xargs -L 1 -I @ basename @ | sort
... como isso teria permitido que xargs interpole os nomes dos arquivos como argumentos para basename .