Как и
ls -S | голова | xargs rm
работает (даже с именами файлов с пробелами и т. д.?)Нет.
xargs
по умолчанию разбивается на любые пробелы, а не только на новые строки. И вы не можете увидеть это с| xargs echo
, посколькуecho
печатает все свои аргументы, разделенные пробелами. (Что-то вроде| xargs printf "% s \ n"
будет печатать их, разделенные символами новой строки, поэтому вы увидите, происходит ли разделение в середине имени файла.)По крайней мере, GNU xargs имеет
-d '\ n'
для разделения только на символы новой строки, а во многих версиях xargs есть-0
для разделения на символы NUL (это идет сfind -print0
]). Вам понадобится хотя бы первый, но в общем случае имена файлов также могут содержать символы новой строки, и в этом случаеhead
тоже не принесет много пользы.Я обязан предупредить вас, что синтаксический анализ вывода
ls
считается неправильным , очевидно, по крайней мере, некоторые версии будут искажать вывод даже без наличия символов новой строки. (Впрочем, вы можете быть в безопасности, если у вас нет новых строк или непечатаемых символов. Возможно.)