So would
ls -S | head | xargs rm
work (even with filenames with spaces etc?)
Não. Por padrão, xargs
divide em qualquer espaço em branco, não apenas em novas linhas.
E você não pode ver isso com | xargs echo
, pois echo
imprime todos os seus argumentos, separados por espaços. (Algo como | xargs printf "%s\n"
iria imprimi-los separados por novas linhas, assim você verá se a divisão acontece no meio de um nome de arquivo.)
Pelo menos o GNU xargs tem -d '\n'
para dividir apenas em novas linhas, e muitas versões do xargs têm -0
para dividir em caracteres NUL (vai com find -print0
). Você quer o primeiro, pelo menos, mas no caso geral, os nomes dos arquivos também podem conter novas linhas, caso em que head
também não será muito útil.
Eu sou obrigado a avisar que analisar a saída de ls
é considerado errado , aparentemente pelo menos algumas versões mangle a saída mesmo sem a presença de novas linhas. (Você pode estar seguro se não tiver novas linhas ou caracteres não imprimíveis, talvez.)