Игнорировать пробелы в перенаправленном выводе в bash

Я хочу отсортировать файлы по размеру в порядке убывания и перечислить их рядом с размером в удобочитаемой форме. Итак, что я сделал:

find $arg -type f -print -exec du -a {} + | sort -nr | head -11 | tail -10 | awk '{$1=""; print $0}' | xargs du -h

И вывод:

3.7G    /path/to/file.iso
400M    /path/to/file2.iso
du: cannot access '/path/to/friends': No such file or directory

Потому что полное имя друзей в этом примере:

/path/to/friends\ 1_1.mp4

Как я могу справиться с этими проблемами? А также лучший способ сделать работу?


person M.J    schedule 02.06.2020    source источник
comment
Пожалуйста, объясните проблему, которую вы пытаетесь решить, а не спрашивайте, что не так с вашей попыткой.   -  person Inian    schedule 02.06.2020
comment
@MortezaJ: я знаю сортировку по последовательности и сортировку по числовому значению, но сортировка по красивому способу для меня в новинку. Думаю, не мешало бы, если бы вы объяснили, что означает этот термин.   -  person user1934428    schedule 02.06.2020
comment
@oguz ismail, спасибо. Проблема решена сейчас   -  person M.J    schedule 02.06.2020
comment
@user1934428 user1934428, красивый способ, безусловно, означает мой идеальный способ, когда я показываю рассматриваемый вывод. :)   -  person M.J    schedule 02.06.2020
comment
Я не понимаю из вывода (который содержит всего две строки), каков ваш идеальный способ. Это похоже на простую буквенно-цифровую сортировку на основе первого поля в строках (поскольку «3» предшествует «4» в ASCII, а «.» будет после «2»).   -  person user1934428    schedule 02.06.2020
comment
@Inian, основная проблема в том, du: cannot access '/path/to/friends': No such file or directory где в файлах можно найти пробелы. поэтому у нас есть ошибка в выводе.   -  person M.J    schedule 02.06.2020
comment
@ user1934428 По-видимому, я хочу сортировать только файлы по размеру красивым способом. означает я хочу сортировать обычные файлы по размеру и перечислять их размеры в удобочитаемой форме .   -  person oguz ismail    schedule 02.06.2020
comment
Я понимаю. Таким образом, это означает сортировку по убыванию по размеру, заданному в удобочитаемой форме. Спасибо за разъяснения.   -  person user1934428    schedule 02.06.2020
comment
@user1934428 user1934428 да, верно. Спасибо   -  person M.J    schedule 02.06.2020


Ответы (1)


Почти все утилиты в пакете GNU coreutils имеют возможность изменить признак конца строки на NUL (либо -z, либо -0), вы можете использовать их, чтобы избежать использования пробелов, специальных символов и т. д. во входных строках. И утилита sort из этого пакета также может сортировать удобочитаемые числа; так что вам даже не нужны xargs и второй du здесь.

find "$arg" -type f -exec du -0ha {} + \
| sort -zhr  \
| head -zn11 \
| tail -zn10 \
| tr '\0' '\n'
person oguz ismail    schedule 02.06.2020