Bash - список и сортировка файлов и их размеры, а также по имени и размеру - PullRequest
5 голосов
/ 18 марта 2012


Я пытаюсь выяснить, как отсортировать список файлов по имени и размеру.
Как отсортировать по имени и размеру файла, используя " du -a ", а не показывать каталоги?

Использование " du -a "

1   ./locatedFiles
0   ./testDir/j.smith.c
0   ./testDir/j.smith
1   ./testDir/sampleFunc/arrays
2   ./testDir/sampleFunc
0   ./testDir/j.smith.txt
0   ./testDir/testing
0   ./testDir/test2
0   ./testDir/test3
0   ./testDir/test1
0   ./testDir/first/j.smith
0   ./testDir/first/test
1   ./testDir/first
1   ./testDir/second
1   ./testDir/third
6   ./testDir

Как мне вывести список всех файлов без каталогов, добавить размеры файлов и отсортировать сначала по имени файла, а затем по размеру?

Спасибо за вашу помощь

Ответы [ 3 ]

18 голосов
/ 18 марта 2012

Вы можете использовать это:

find -type f -printf "%f  %s %p\n"|sort

Объяснение:

  • -type f только для поиска файлов
  • -printf для печати вывода в определенном формате:
    • % f для печати имени файла
    • % s для печати размера файла
    • % p для печати всего имени файла (то есть с ведущими папками) - вы можетеопустите это, если хотите

Затем выполните сортировку, которая сортирует в указанном выше порядке (то есть имя файла, затем размер файла, затем путь к файлу).Вывод будет выглядеть примерно так (часть показанного вывода):

...
XKBstr.h 18278 ./extensions/XKBstr.h
XlibConf.h 1567 ./XlibConf.h
Xlib.h 99600 ./Xlib.h
Xlibint.h 38897 ./Xlibint.h
Xlocale.h 1643 ./Xlocale.h
xlogo11 219 ./bitmaps/xlogo11
....

Надеюсь, это поможет

8 голосов
/ 18 марта 2012

Вы можете использовать команду sort

$ find -type f -printf $'%s\t%f\n' | sort -k2,2 -k1,1n

сортировка по второму полю (имени), затем по первому полю (размеру) по численности.

1 голос
/ 18 марта 2012

Как говорят другие ответы, это не проблема bash.

du в значительной степени настаивает на том, чтобы рассказать вам о каталогах: если вы указываете на каталог, то с или без -a он сообщит вам об этом.

Однако, если у вас есть GNU du, вы можете сказать ему, чтобы он читал список имен файлов, заканчивающихся NUL, из stdin, поэтому вы можете использовать findчтобы получить список: find ... -print0 | du --files0-from=- (здесь вам не нужен флаг -a).(Если у вас нет опции --files0-from, вы все равно можете относительно эффективно вызывать du, используя xargs; см. Документацию xargs.)

Однако если у вас есть GNU du,у вас, вероятно, есть GNU find, в котором -printf, как описано @ icyrock.com.Просто используйте это.Затем используйте явный sort.

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