Сортировка массива bash - PullRequest
1 голос
/ 16 ноября 2011

Я пытаюсь отсортировать вывод этого кода по размеру файла. В настоящее время у меня есть:

IFS=!
FILEARRAY=(`find * -printf %f!`)

чтобы получить все имена файлов из каталога. Я пытался обойти это разными способами, и ничего не работает. Можно ли вообще так делать или мне нужно получить имена файлов в моем массиве по-другому?

Спасибо

Ответы [ 3 ]

0 голосов
/ 16 ноября 2011

Попробуйте что-то вроде этого:

FILEARRAY=$(find * -printf '%s~%f\n' | sort -n | awk -F"~" '{print $2}')

Это должно дать вам список имен файлов, отсортированных по размеру.

0 голосов
/ 16 ноября 2011

Не использует массивы bash. Также не разбирает ls

find . -type f -printf '%s:%f\n' | sort -t: -n -k1 | cut -d: -f2-
0 голосов
/ 16 ноября 2011

Не уверен, что вы пытаетесь достичь здесь, но чтобы извлечь размер файлов, которые вы можете использовать sed.чтобы передать его sort или какой-либо другой утилите сортировки, посмотрите xargs, которая дает вам некоторые дополнительные функции при конвейере и может быть полезна.

Редактировать: Если вы пытаетесь отсортировать все файлыв текущем каталоге по размеру, что-то вроде этого:

find ./ -name "*" | xargs ls -s | sort -n

должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...