По умолчанию ls управляют видами только именем файла, но я хочу, чтобы каталоги появились перед другими типами файлов. Я мог бы даже хотеть, чтобы файлы были отсортированы следовательно, как путь виды Windows Explorer столбцом типа. Существует ли способ сделать что-то похожее с ls?
Я думаю, что полный ответ - это скорее комбинация из вышесказанного.
-X (позже --sort=extension)
поддерживается в Linux, по крайней мере с FC3 и будет сортироваться на основе расширений. --group-directories-first
было добавлено совсем недавно (может быть около FC8?). Однако, похоже, что их объединение не работает (по крайней мере, на FC8).
Похоже, что основная проблема заключается в использовании сингулярных ключей первичного сорта. Смотрите обсуждение списка рассылки , чтобы получить некоторое представление о нем.
.Если Вы не находитесь на Linux,
ls -l |sort -d -k 1.1,1.1r -k 9 |awk '{print $9}'
должен отсортировать каталоги сначала (сообщите мне, неправ ли я). Не сортирует следовательно, хотя: необходимо сделать awk оператор намного более занятым, если Вы хотите сделать это...
Чтобы также заставить его работать с именами, содержащими пробелы, я, вероятно, заменил бы awk чем-то как sed -E -e 's/([^ ]+[ ]+){8}//'
разделять первые 8 полей вместо того, чтобы печатать 9-е
На баше, это будет что-то вроде работы:
$ ls | rev | sort | rev
От man rev
:
The rev utility copies the specified files to the standard output,
reversing the order of characters in every line. If no files are speci-
fied, the standard input is read.
Так что... 1. ls дает свой выход, с любыми флагами, которые вы захотите. 2. каждая линия перевернута 3. Тогда они отсортированы 4. и снова повернул вспять 5. вот так:
Или, более того, как показано ниже. Они сортируются по последнему символу, затем следующему и т.д. Все файлы .rtf, например, перечислены вместе, после .save-файла и другого файла без расширения, имя которого заканчивается на 'e'. Затем идут файлы .png и так далее. Это также сработает и с ls -l, потому что расширение, как правило, последнее в строке (исключения, если у вас есть строки типа "tmp@ -> /home/jones/tmp", где ссылки следуют за их целями).
$ ls | rev|sort|rev cslu1 ls.mp2 ls.mp3 ls.mp4 trees_110214-15 PAT CSLU Proxy Form.doc finannbyid toannbyid 101209ssi.txt.save to_annotate_size Matas-time-by-week-integration2.rtf cyp3.rtf data-dir-scan.perl.doc.rtf whence-r21-numid.rtf platypus.rtf Screen shot 2011-01-21 at 2.17.50 PM.png emacs print help.png log new_month_log special Google-ngram-critique.html perl_path.html nl DWE_BEN_89808.2.ann foo d.o.foo 100811_from_iMac_Documents_in_dock.zip to-palikir.zip tmp file-cleanup bar data-scan-docs cmp-mg-ann-numids finished_numids to_annotate_numids manls.ps Mike_address_ticket cyp2.out cyp3.out locate-cyp.out manls.out DWE_BEN_89808.2.text tag2.txt l2.txt du-h-d3.txt finished_ann_numids_110407_1714.txt finished_all_numids_110407_1718.txt data-dir-scan.perl.doc.txt whence-r21-numid.txt finannid.txt toannid.txt b9-workspace-anndiff.txt tag.txt duh.txt d.o-mail.txt safextn.txt mg3longhdr.txt finished_numids.txt 41692-langnames.txt TimeAnnotationGuidelines.txt 41langs.txt thing4-homedir-links.txt bnlinks.txt grants.txt mata-file-reports.txt logx.txt logx b9-workspace-anndiff.txt~ bnlinks.txt~