Как я могу изменить свою команду `ls`?

Просто зарегистрируйтесь в папке /media/test0.

chown user.user / media / test0
12
задан 20 May 2011 в 20:08

64 ответа

Вот мой быстрый удар по этому вопросу.

$ function lss { ls -l --group-directories-first --time-style +%s $@ | grep -v '^total' | awk 'BEGIN {print("DIRS")} {if (f!=1 && $1 ~ /^-/) {print "\nFILES"; f=1}; printf("%s\t%s %s %s:%s\n", $7, $6, $1, $3, $4);}'; } $ alias ls='lss' $ ls DIRS directory0 1305901476 drwxr-xr-x ak:ak directory1 1305901476 drwxr-xr-x ak:ak FILES filename0 1305901484 -rw-r--r-- ak:ak filename1 1305901484 -rw-r--r-- ak:ak filename2 1305901484 -rw-r--r-- ak:ak filename3 1305901484 -rw-r--r-- ak:ak

Преимущество этого подхода в том, что он не требует нескольких обходов каталога и печатает вывод, когда он готов. Попробуйте запустить это после touch filename{0..10000} в качестве теста.

Опустите function и alias строки в ~/.bashrc, чтобы сделать его постоянным.

Бенчмаркинг от Oli:

oli@bert:~/Desktop$ mkdir test oli@bert:~/Desktop$ cd test oli@bert:~/Desktop/test$ mkdir dir{0..100000} oli@bert:~/Desktop/test$ touch filename{0..100000} oli@bert:~/Desktop/test$ time /bin/ls>/dev/null real 0m0.975s user 0m0.860s sys 0m0.110s oli@bert:~/Desktop/test$ time ls --group-directories-first -l >/dev/null real 0m1.810s user 0m1.210s sys 0m0.580s oli@bert:~/Desktop/test$ time lss>/dev/null # ændrük's method real 0m2.035s user 0m1.810s sys 0m0.780s oli@bert:~/Desktop/test$ time ~/bin/ls>/dev/null # Oli's method real 0m5.496s user 0m4.290s sys 0m1.460s
7
ответ дан 25 July 2018 в 21:52
  • 1
    Добавлен некоторый бенчмаркинг на ваш пост (как вы упомянули). Да, более 100 000 каталогов и 100 000 файлов, ваш занимает меньше половины времени. Но ls по-прежнему намного быстрее. В любом случае, это край. Большинство людей никогда не имеют таких огромных списков каталогов. Для нормальных людей наблюдается небольшая заметная разница. Ницца awk, хотя. +1 – Oli♦ 20 May 2011 в 20:25

Моим последним ls мод в ~/bin является:

#!/bin/bash ACCOUNT_ID=$UID # #SET ACCOUNT_NAME ACCOUNT_NAME=$( cat /etc/passwd | grep $ACCOUNT_ID | cut -d: -f1 ); ls -l -F --color -h --group-directories-first $1 |\ sed "s/$ACCOUNT_NAME/\$USER/g" | ack --passthru --color \\\$USER ;

P.S. Должен был назвать его ~/bin/myls или он зависает в цикле, который никогда не достигнет ls системы.

Пример:

$ sudo mkdir -vp /temp/Nother_DIR | tee -a /tmp/record mkdir: created directory `/temp' mkdir: created directory `/temp/Nother_DIR' $ sudo chown -vR $USER:$USER /temp | f | tee -a /tmp/record changed ownership of `/temp/Nother_DIR' to $USER:$USER changed ownership of `/temp' to $USER:$USER $ cd /temp $ touch a b c d $ ln -sv d e | tee -a /tmp/record `e' -> `d' $ ln -sv e f | tee -a /tmp/record `f' -> `e' $ myls | tee -a /tmp/record total 4.0K drwxr-xr-x 2 $USER $USER 4.0K Sep 19 00:46 Nother_DIR -rw-r--r-- 1 $USER $USER 0 Sep 19 00:46 a -rw-r--r-- 1 $USER $USER 0 Sep 19 00:46 b -rw-r--r-- 1 $USER $USER 0 Sep 19 00:46 c -rw-r--r-- 1 $USER $USER 0 Sep 19 00:46 d lrwxrwxrwx 1 $USER $USER 1 Sep 19 00:46 e -> d lrwxrwxrwx 1 $USER $USER 1 Sep 19 00:46 f -> e
0
ответ дан 25 July 2018 в 21:52

ls не поддерживает значительную настройку выходного файла.

Используйте

ls --group-directories-first -l

, чтобы сначала получить каналы.

Посмотрите на лимузин (не установлен по умолчанию) для альтернативы ls, который поддерживает больше настройки вывода (но не поддерживает все опции ls)

1
ответ дан 25 July 2018 в 21:52

Мой последний мод ls в ~ / bin:

#!/bin/bash ACCOUNT_ID=$UID # #SET ACCOUNT_NAME ACCOUNT_NAME=$( cat /etc/passwd | grep $ACCOUNT_ID | cut -d: -f1 ); ls -l -F --color -h --group-directories-first $1 |\ sed "s/$ACCOUNT_NAME/\$USER/g" | ack --passthru --color \\\$USER ;

Извините за формат сообщения. Пытался использовать его с помощью copy / paste, но, возможно, не пошел. Ура! Постскриптум Должен назвать его ~ / bin / myls или он будет висеть в цикле, который никогда не достигнет ls системы.

-1
ответ дан 25 July 2018 в 21:52

Вы можете написать скрипт bash под названием ~/bin/ls, который должен переопределить /bin/ls. не забудьте запустить chmod +x ~/bin/ls.

Я только что написал это, что, кажется, делает большую часть того, что вы хотите выполнить (в том числе прохождение дополнительных аргументов)

#!/bin/bash DIRS="`/bin/ls --color=auto -l $@ | grep ^d`" FILES="`/bin/ls --color=auto -l $@ | grep ^\-`" if [ "$DIRS" ] then echo "DIRECTORIES" echo -e "$DIRS\ " fi if [ "$FILES" ] then echo "FILES" echo "$FILES\ " fi

Кто-то может хотите немного убрать это или улучшить форматирование вывода, но там вы идете.

И вот какой-то оригинальный вывод:

ls DIRECTORIES drwxr-xr-x 4 oli oli 4096 2010-12-16 15:40 markitup drwxr-xr-x 7 oli oli 4096 2011-01-16 16:58 media drwxr-xr-x 3 oli oli 4096 2010-12-16 15:41 post drwxr-xr-x 9 oli oli 4096 2010-09-16 05:23 templates FILES -rw-r--r-- 1 oli oli 5361664 2010-09-06 16:32 db.db -rw-r--r-- 1 oli oli 0 2008-12-11 09:22 __init__.py -rwxr-xr-x 1 oli oli 542 2008-12-11 09:22 manage.py -rw-r--r-- 1 oli oli 13 2010-03-23 18:14 settingsdev.py -rw-r--r-- 1 oli oli 2642 2010-12-16 15:40 settings.py -rw-r--r-- 1 oli oli 1818 2010-12-16 15:40 urls.py -rw-r--r-- 1 oli oli 432 2010-06-22 20:54 views.py

И с аргументами:

ls -a DIRECTORIES drwxr-xr-x 8 oli oli 4096 2011-01-12 00:46 . drwxr-xr-x 19 oli oli 4096 2011-04-13 17:24 .. drwxr-xr-x 6 oli oli 4096 2010-02-03 13:50 .bzr drwxr-xr-x 4 oli oli 4096 2010-12-16 15:40 markitup drwxr-xr-x 7 oli oli 4096 2011-01-16 16:58 media drwxr-xr-x 3 oli oli 4096 2010-12-16 15:41 post drwxr-xr-x 9 oli oli 4096 2010-09-16 05:23 templates FILES -rw-r--r-- 1 oli oli 65 2010-03-27 07:58 .bzrignore -rw-r--r-- 1 oli oli 5361664 2010-09-06 16:32 db.db -rw-r--r-- 1 oli oli 0 2008-12-11 09:22 __init__.py -rwxr-xr-x 1 oli oli 542 2008-12-11 09:22 manage.py -rw-r--r-- 1 oli oli 13 2010-03-23 18:14 settingsdev.py -rw-r--r-- 1 oli oli 2642 2010-12-16 15:40 settings.py -rw-r--r-- 1 oli oli 1818 2010-12-16 15:40 urls.py -rw-r--r-- 1 oli oli 432 2010-06-22 20:54 views.py
15
ответ дан 25 July 2018 в 21:52

Расширение настроек псевдонимов в .bashrc - это мой предпочтительный способ получения более удобных команд «ls». Мне особенно нравится «lf» (требуется установка «дерева»).

# some more ls aliases alias ll='ls -alF' alias la='ls -A' alias l='ls -CF' alias lf='tree -d -L 1'
2
ответ дан 25 July 2018 в 21:52

ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep "^l"

Показывает ... каталоги, нормальные файлы, ссылки в этом порядке.

Сделайте это псевдонимом, и вы готовы к работе.

Нашел другой метод:

ls -l --color -h --group-directories-first

Сначала он создает каталоги и окрашивает имена файлов.

В ~/.bashrc вы можете создать псевдоним для эта команда выглядит так:

alias ls1='ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep "^l"

Пример вывода:

drwxr-xr-x 5 96 2011-05-20 13:41 . drwxr-xr-x 16 xxxx uuuu 96 2010-03-05 12:34 .. drwx------ 2 xxxx uuuu 96 2009-02-13 14:31 .ssh drwxrwxr-x 2 xxxx uuuu 96 2009-12-03 13:49 .xxx drwxrwxr-x 5 xxxx uuuu 96 2010-12-06 15:51 xxxxxx -rw------- 1 xxxx uuuu 05 2011-05-20 14:12 .bash_history -rw-r--r-- 1 xxxx uuuu 20 2009-02-12 09:33 .bash_logout -rw-r--r-- 1 xxxx uuuu 29 2009-03-06 11:47 .bashrc -rw-r--r-- 1 xxxx uuuu 80 2011-05-20 13:42 fff -rw-rw-r-- 1 xxxx uuuu 03 2011-05-18 10:21 dffff

или для второго: alias ls2=ls -l --color -h --group-directories-first

Пример вывода: drwxrwxr-x 5 xxxx uuuu 4.0K 2010-12-06 15:51 ddddd -rw-r--r-- 1 xxxx uuuu 339M 2011-05-20 13:42 sssss -rw-rw-r-- 1 xxxx uuuu 4.6M 2011-05-18 10:21 dxsssss -rwxrwxr-x 1 xxxx uuuu 68 2011-02-22 15:55 5555 -rwxr--r-- 1 xxxx uuuu 20K 2010-12-06 16:11 ffff ddddd будет в другом цвете. добавьте -a, чтобы включить скрытые файлы.

, и для этого вы создали команду ls1 и ls2.

4
ответ дан 25 July 2018 в 21:52

Одним из самых мощных инструментов в Unix-системах является команда find. Мы можем использовать его для эмуляции вывода ls с флагом -ls и поиска по типу файла с флагом -type. Таким образом, то, что вы видите ниже, - это точно такая же команда, но с find поиск двух разных типов. printf заявления только говорят, что вы хотите, чтобы это объявление было первым.

printf "****DIRS****\n"; find . -maxdepth 1 -type d -ls; echo "****FILES****"; find . -maxdepth 1 -type f -ls

Вот пример вывода:

CURRENT DIR:[/home/xieerqi/bin] $ printf "****DIRS****"; find . -maxdepth 1 -type d -ls; echo "****FILES****"; find . -maxdepth 1 -type f -ls ****DIRS**** 5795516 4 drwxrwxr-x 8 xieerqi xieerqi 4096 Aug 19 16:25 . 5795514 4 drwxrwxr-x 2 xieerqi xieerqi 4096 Aug 19 15:27 ./c 5795511 4 drwxrwxr-x 2 xieerqi xieerqi 4096 Aug 19 15:27 ./python 5795153 4 drwxrwxr-x 2 xieerqi xieerqi 4096 Aug 19 15:41 ./perl 5795532 4 drwxrwxr-x 2 xieerqi xieerqi 4096 Aug 19 15:27 ./random 5795531 4 drwxrwxr-x 2 xieerqi xieerqi 4096 Aug 19 15:27 ./sh 5795141 4 drwxrwxr-x 2 xieerqi xieerqi 4096 Aug 19 15:27 ./cs2 ****FILES**** 5795538 4 -rw-rw-r-- 1 xieerqi xieerqi 178 Aug 19 16:25 ./somefile.txt 5795539 4 -rw-rw-r-- 1 xieerqi xieerqi 219 Aug 19 16:26 ./somefile2.txt

Обратите внимание, что find перечисляет все файлы, включая скрытые файлы с ведущей точкой, например .bashrc.

Теперь, чтобы облегчить доступ к этой команде, создайте псевдоним для этого в .bashrc. Я сделал так, как

alias ls2='printf "****DIRS****\n"; find . -maxdepth 1 -type d -ls; echo "****FILES****"; find . -maxdepth 1 -type f -ls '

Исходный bashrc с . .bashrc или выйдите и введите терминал. Ваш псевдоним теперь готов к использованию в любое время.

2
ответ дан 25 July 2018 в 21:52

Вот мой быстрый удар по этому вопросу.

$ function lss { ls -l --group-directories-first --time-style +%s $@ | grep -v '^total' | awk 'BEGIN {print("DIRS")} {if (f!=1 && $1 ~ /^-/) {print "\nFILES"; f=1}; printf("%s\t%s %s %s:%s\n", $7, $6, $1, $3, $4);}'; } $ alias ls='lss' $ ls DIRS directory0 1305901476 drwxr-xr-x ak:ak directory1 1305901476 drwxr-xr-x ak:ak FILES filename0 1305901484 -rw-r--r-- ak:ak filename1 1305901484 -rw-r--r-- ak:ak filename2 1305901484 -rw-r--r-- ak:ak filename3 1305901484 -rw-r--r-- ak:ak

Преимущество этого подхода в том, что он не требует нескольких обходов каталога и печатает вывод, когда он готов. Попробуйте запустить это после touch filename{0..10000} в качестве теста.

Опустите function и alias строки в ~/.bashrc, чтобы сделать его постоянным.

Бенчмаркинг от Oli:

oli@bert:~/Desktop$ mkdir test oli@bert:~/Desktop$ cd test oli@bert:~/Desktop/test$ mkdir dir{0..100000} oli@bert:~/Desktop/test$ touch filename{0..100000} oli@bert:~/Desktop/test$ time /bin/ls>/dev/null real 0m0.975s user 0m0.860s sys 0m0.110s oli@bert:~/Desktop/test$ time ls --group-directories-first -l >/dev/null real 0m1.810s user 0m1.210s sys 0m0.580s oli@bert:~/Desktop/test$ time lss>/dev/null # ændrük's method real 0m2.035s user 0m1.810s sys 0m0.780s oli@bert:~/Desktop/test$ time ~/bin/ls>/dev/null # Oli's method real 0m5.496s user 0m4.290s sys 0m1.460s
7
ответ дан 31 July 2018 в 10:44
  • 1
    Добавлен некоторый бенчмаркинг на ваш пост (как вы упомянули). Да, более 100 000 каталогов и 100 000 файлов, ваш занимает меньше половины времени. Но ls по-прежнему намного быстрее. В любом случае, это край. Большинство людей никогда не имеют таких огромных списков каталогов. Для нормальных людей наблюдается небольшая заметная разница. Ницца awk, хотя. +1 – Oli♦ 20 May 2011 в 20:25

Моим последним ls мод в ~/bin является:

#!/bin/bash ACCOUNT_ID=$UID # #SET ACCOUNT_NAME ACCOUNT_NAME=$( cat /etc/passwd | grep $ACCOUNT_ID | cut -d: -f1 ); ls -l -F --color -h --group-directories-first $1 |\ sed "s/$ACCOUNT_NAME/\$USER/g" | ack --passthru --color \\\$USER ;

P.S. Должен был назвать его ~/bin/myls или он зависает в цикле, который никогда не достигнет ls системы.

Пример:

$ sudo mkdir -vp /temp/Nother_DIR | tee -a /tmp/record mkdir: created directory `/temp' mkdir: created directory `/temp/Nother_DIR' $ sudo chown -vR $USER:$USER /temp | f | tee -a /tmp/record changed ownership of `/temp/Nother_DIR' to $USER:$USER changed ownership of `/temp' to $USER:$USER $ cd /temp $ touch a b c d $ ln -sv d e | tee -a /tmp/record `e' -> `d' $ ln -sv e f | tee -a /tmp/record `f' -> `e' $ myls | tee -a /tmp/record total 4.0K drwxr-xr-x 2 $USER $USER 4.0K Sep 19 00:46 Nother_DIR -rw-r--r-- 1 $USER $USER 0 Sep 19 00:46 a -rw-r--r-- 1 $USER $USER 0 Sep 19 00:46 b -rw-r--r-- 1 $USER $USER 0 Sep 19 00:46 c -rw-r--r-- 1 $USER $USER 0 Sep 19 00:46 d lrwxrwxrwx 1 $USER $USER 1 Sep 19 00:46 e -> d lrwxrwxrwx 1 $USER $USER 1 Sep 19 00:46 f -> e
0
ответ дан 31 July 2018 в 10:44

ls не поддерживает значительную настройку выходного файла.

Используйте

ls --group-directories-first -l

, чтобы сначала получить каналы.

Посмотрите на лимузин (не установлен по умолчанию) для альтернативы ls, который поддерживает больше настройки вывода (но не поддерживает все опции ls)

1
ответ дан 31 July 2018 в 10:44

Мой последний мод ls в ~ / bin:

#!/bin/bash ACCOUNT_ID=$UID # #SET ACCOUNT_NAME ACCOUNT_NAME=$( cat /etc/passwd | grep $ACCOUNT_ID | cut -d: -f1 ); ls -l -F --color -h --group-directories-first $1 |\ sed "s/$ACCOUNT_NAME/\$USER/g" | ack --passthru --color \\\$USER ;

Извините за формат сообщения. Пытался использовать его с помощью copy / paste, но, возможно, не пошел. Ура! Постскриптум Должен назвать его ~ / bin / myls или он будет висеть в цикле, который никогда не достигнет ls системы.

-1
ответ дан 31 July 2018 в 10:44

Вы можете написать скрипт bash под названием ~/bin/ls, который должен переопределить /bin/ls. не забудьте запустить chmod +x ~/bin/ls.

Я только что написал это, что, кажется, делает большую часть того, что вы хотите выполнить (в том числе прохождение дополнительных аргументов)

#!/bin/bash DIRS="`/bin/ls --color=auto -l $@ | grep ^d`" FILES="`/bin/ls --color=auto -l $@ | grep ^\-`" if [ "$DIRS" ] then echo "DIRECTORIES" echo -e "$DIRS\ " fi if [ "$FILES" ] then echo "FILES" echo "$FILES\ " fi

Кто-то может хотите немного убрать это или улучшить форматирование вывода, но там вы идете.

И вот какой-то оригинальный вывод:

ls DIRECTORIES drwxr-xr-x 4 oli oli 4096 2010-12-16 15:40 markitup drwxr-xr-x 7 oli oli 4096 2011-01-16 16:58 media drwxr-xr-x 3 oli oli 4096 2010-12-16 15:41 post drwxr-xr-x 9 oli oli 4096 2010-09-16 05:23 templates FILES -rw-r--r-- 1 oli oli 5361664 2010-09-06 16:32 db.db -rw-r--r-- 1 oli oli 0 2008-12-11 09:22 __init__.py -rwxr-xr-x 1 oli oli 542 2008-12-11 09:22 manage.py -rw-r--r-- 1 oli oli 13 2010-03-23 18:14 settingsdev.py -rw-r--r-- 1 oli oli 2642 2010-12-16 15:40 settings.py -rw-r--r-- 1 oli oli 1818 2010-12-16 15:40 urls.py -rw-r--r-- 1 oli oli 432 2010-06-22 20:54 views.py

И с аргументами:

ls -a DIRECTORIES drwxr-xr-x 8 oli oli 4096 2011-01-12 00:46 . drwxr-xr-x 19 oli oli 4096 2011-04-13 17:24 .. drwxr-xr-x 6 oli oli 4096 2010-02-03 13:50 .bzr drwxr-xr-x 4 oli oli 4096 2010-12-16 15:40 markitup drwxr-xr-x 7 oli oli 4096 2011-01-16 16:58 media drwxr-xr-x 3 oli oli 4096 2010-12-16 15:41 post drwxr-xr-x 9 oli oli 4096 2010-09-16 05:23 templates FILES -rw-r--r-- 1 oli oli 65 2010-03-27 07:58 .bzrignore -rw-r--r-- 1 oli oli 5361664 2010-09-06 16:32 db.db -rw-r--r-- 1 oli oli 0 2008-12-11 09:22 __init__.py -rwxr-xr-x 1 oli oli 542 2008-12-11 09:22 manage.py -rw-r--r-- 1 oli oli 13 2010-03-23 18:14 settingsdev.py -rw-r--r-- 1 oli oli 2642 2010-12-16 15:40 settings.py -rw-r--r-- 1 oli oli 1818 2010-12-16 15:40 urls.py -rw-r--r-- 1 oli oli 432 2010-06-22 20:54 views.py
15
ответ дан 31 July 2018 в 10:44

Расширение настроек псевдонимов в .bashrc - это мой предпочтительный способ получения более удобных команд «ls». Мне особенно нравится «lf» (требуется установка «дерева»).

# some more ls aliases alias ll='ls -alF' alias la='ls -A' alias l='ls -CF' alias lf='tree -d -L 1'
2
ответ дан 31 July 2018 в 10:44

ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep "^l"

Показывает ... каталоги, нормальные файлы, ссылки в этом порядке.

Сделайте это псевдонимом, и вы готовы к работе.

Нашел другой метод:

ls -l --color -h --group-directories-first

Сначала он создает каталоги и окрашивает имена файлов.

В ~/.bashrc вы можете создать псевдоним для эта команда выглядит так:

alias ls1='ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep "^l"

Пример вывода:

drwxr-xr-x 5 96 2011-05-20 13:41 . drwxr-xr-x 16 xxxx uuuu 96 2010-03-05 12:34 .. drwx------ 2 xxxx uuuu 96 2009-02-13 14:31 .ssh drwxrwxr-x 2 xxxx uuuu 96 2009-12-03 13:49 .xxx drwxrwxr-x 5 xxxx uuuu 96 2010-12-06 15:51 xxxxxx -rw------- 1 xxxx uuuu 05 2011-05-20 14:12 .bash_history -rw-r--r-- 1 xxxx uuuu 20 2009-02-12 09:33 .bash_logout -rw-r--r-- 1 xxxx uuuu 29 2009-03-06 11:47 .bashrc -rw-r--r-- 1 xxxx uuuu 80 2011-05-20 13:42 fff -rw-rw-r-- 1 xxxx uuuu 03 2011-05-18 10:21 dffff

или для второго: alias ls2=ls -l --color -h --group-directories-first

Пример вывода: drwxrwxr-x 5 xxxx uuuu 4.0K 2010-12-06 15:51 ddddd -rw-r--r-- 1 xxxx uuuu 339M 2011-05-20 13:42 sssss -rw-rw-r-- 1 xxxx uuuu 4.6M 2011-05-18 10:21 dxsssss -rwxrwxr-x 1 xxxx uuuu 68 2011-02-22 15:55 5555 -rwxr--r-- 1 xxxx uuuu 20K 2010-12-06 16:11 ffff ddddd будет в другом цвете. добавьте -a, чтобы включить скрытые файлы.

, и для этого вы создали команду ls1 и ls2.

4
ответ дан 31 July 2018 в 10:44

Одним из самых мощных инструментов в Unix-системах является команда find. Мы можем использовать его для эмуляции вывода ls с флагом -ls и поиска по типу файла с флагом -type. Таким образом, то, что вы видите ниже, - это точно такая же команда, но с find поиск двух разных типов. printf заявления только говорят, что вы хотите, чтобы это объявление было первым.

printf "****DIRS****\n"; find . -maxdepth 1 -type d -ls; echo "****FILES****"; find . -maxdepth 1 -type f -ls

Вот пример вывода:

CURRENT DIR:[/home/xieerqi/bin] $ printf "****DIRS****"; find . -maxdepth 1 -type d -ls; echo "****FILES****"; find . -maxdepth 1 -type f -ls ****DIRS**** 5795516 4 drwxrwxr-x 8 xieerqi xieerqi 4096 Aug 19 16:25 . 5795514 4 drwxrwxr-x 2 xieerqi xieerqi 4096 Aug 19 15:27 ./c 5795511 4 drwxrwxr-x 2 xieerqi xieerqi 4096 Aug 19 15:27 ./python 5795153 4 drwxrwxr-x 2 xieerqi xieerqi 4096 Aug 19 15:41 ./perl 5795532 4 drwxrwxr-x 2 xieerqi xieerqi 4096 Aug 19 15:27 ./random 5795531 4 drwxrwxr-x 2 xieerqi xieerqi 4096 Aug 19 15:27 ./sh 5795141 4 drwxrwxr-x 2 xieerqi xieerqi 4096 Aug 19 15:27 ./cs2 ****FILES**** 5795538 4 -rw-rw-r-- 1 xieerqi xieerqi 178 Aug 19 16:25 ./somefile.txt 5795539 4 -rw-rw-r-- 1 xieerqi xieerqi 219 Aug 19 16:26 ./somefile2.txt

Обратите внимание, что find перечисляет все файлы, включая скрытые файлы с ведущей точкой, например .bashrc.

Теперь, чтобы облегчить доступ к этой команде, создайте псевдоним для этого в .bashrc. Я сделал так, как

alias ls2='printf "****DIRS****\n"; find . -maxdepth 1 -type d -ls; echo "****FILES****"; find . -maxdepth 1 -type f -ls '

Исходный bashrc с . .bashrc или выйдите и введите терминал. Ваш псевдоним теперь готов к использованию в любое время.

2
ответ дан 31 July 2018 в 10:44

Вот мой быстрый удар по этому вопросу.

$ function lss { ls -l --group-directories-first --time-style +%s $@ | grep -v '^total' | awk 'BEGIN {print("DIRS")} {if (f!=1 && $1 ~ /^-/) {print "\nFILES"; f=1}; printf("%s\t%s %s %s:%s\n", $7, $6, $1, $3, $4);}'; } $ alias ls='lss' $ ls DIRS directory0 1305901476 drwxr-xr-x ak:ak directory1 1305901476 drwxr-xr-x ak:ak FILES filename0 1305901484 -rw-r--r-- ak:ak filename1 1305901484 -rw-r--r-- ak:ak filename2 1305901484 -rw-r--r-- ak:ak filename3 1305901484 -rw-r--r-- ak:ak

Преимущество этого подхода в том, что он не требует нескольких обходов каталога и печатает вывод, когда он готов. Попробуйте запустить это после touch filename{0..10000} в качестве теста.

Опустите function и alias строки в ~/.bashrc, чтобы сделать его постоянным.

Бенчмаркинг от Oli:

oli@bert:~/Desktop$ mkdir test oli@bert:~/Desktop$ cd test oli@bert:~/Desktop/test$ mkdir dir{0..100000} oli@bert:~/Desktop/test$ touch filename{0..100000} oli@bert:~/Desktop/test$ time /bin/ls>/dev/null real 0m0.975s user 0m0.860s sys 0m0.110s oli@bert:~/Desktop/test$ time ls --group-directories-first -l >/dev/null real 0m1.810s user 0m1.210s sys 0m0.580s oli@bert:~/Desktop/test$ time lss>/dev/null # ændrük's method real 0m2.035s user 0m1.810s sys 0m0.780s oli@bert:~/Desktop/test$ time ~/bin/ls>/dev/null # Oli's method real 0m5.496s user 0m4.290s sys 0m1.460s
7
ответ дан 2 August 2018 в 03:28
  • 1
    Добавлен некоторый бенчмаркинг на ваш пост (как вы упомянули). Да, более 100 000 каталогов и 100 000 файлов, ваш занимает меньше половины времени. Но ls по-прежнему намного быстрее. В любом случае, это край. Большинство людей никогда не имеют таких огромных списков каталогов. Для нормальных людей наблюдается небольшая заметная разница. Ницца awk, хотя. +1 – Oli♦ 20 May 2011 в 20:25

Моим последним ls мод в ~/bin является:

#!/bin/bash ACCOUNT_ID=$UID # #SET ACCOUNT_NAME ACCOUNT_NAME=$( cat /etc/passwd | grep $ACCOUNT_ID | cut -d: -f1 ); ls -l -F --color -h --group-directories-first $1 |\ sed "s/$ACCOUNT_NAME/\$USER/g" | ack --passthru --color \\\$USER ;

P.S. Должен был назвать его ~/bin/myls или он зависает в цикле, который никогда не достигнет ls системы.

Пример:

$ sudo mkdir -vp /temp/Nother_DIR | tee -a /tmp/record mkdir: created directory `/temp' mkdir: created directory `/temp/Nother_DIR' $ sudo chown -vR $USER:$USER /temp | f | tee -a /tmp/record changed ownership of `/temp/Nother_DIR' to $USER:$USER changed ownership of `/temp' to $USER:$USER $ cd /temp $ touch a b c d $ ln -sv d e | tee -a /tmp/record `e' -> `d' $ ln -sv e f | tee -a /tmp/record `f' -> `e' $ myls | tee -a /tmp/record total 4.0K drwxr-xr-x 2 $USER $USER 4.0K Sep 19 00:46 Nother_DIR -rw-r--r-- 1 $USER $USER 0 Sep 19 00:46 a -rw-r--r-- 1 $USER $USER 0 Sep 19 00:46 b -rw-r--r-- 1 $USER $USER 0 Sep 19 00:46 c -rw-r--r-- 1 $USER $USER 0 Sep 19 00:46 d lrwxrwxrwx 1 $USER $USER 1 Sep 19 00:46 e -> d lrwxrwxrwx 1 $USER $USER 1 Sep 19 00:46 f -> e
0
ответ дан 2 August 2018 в 03:28

ls не поддерживает значительную настройку выходного файла.

Используйте

ls --group-directories-first -l

, чтобы сначала получить каналы.

Посмотрите лимузин (не установлен по умолчанию) на альтернативу ls, который поддерживает больше настроек вывода (но не поддерживает все опции ls)

1
ответ дан 2 August 2018 в 03:28

Мой последний мод ls в ~ / bin:

#!/bin/bash ACCOUNT_ID=$UID # #SET ACCOUNT_NAME ACCOUNT_NAME=$( cat /etc/passwd | grep $ACCOUNT_ID | cut -d: -f1 ); ls -l -F --color -h --group-directories-first $1 |\ sed "s/$ACCOUNT_NAME/\$USER/g" | ack --passthru --color \\\$USER ;

Извините за формат сообщения. Пытался использовать его с помощью copy / paste, но, возможно, не пошел. Ура! Постскриптум Должен назвать его ~ / bin / myls или он будет висеть в цикле, который никогда не достигнет ls системы.

-1
ответ дан 2 August 2018 в 03:28

Вы можете написать скрипт bash под названием ~/bin/ls, который должен переопределить /bin/ls. не забудьте запустить chmod +x ~/bin/ls.

Я только что написал это, что, кажется, делает большую часть того, что вы хотите выполнить (в том числе прохождение дополнительных аргументов)

#!/bin/bash DIRS="`/bin/ls --color=auto -l $@ | grep ^d`" FILES="`/bin/ls --color=auto -l $@ | grep ^\-`" if [ "$DIRS" ] then echo "DIRECTORIES" echo -e "$DIRS\ " fi if [ "$FILES" ] then echo "FILES" echo "$FILES\ " fi

Кто-то может хотите немного убрать это или улучшить форматирование вывода, но там вы идете.

И вот какой-то оригинальный вывод:

ls DIRECTORIES drwxr-xr-x 4 oli oli 4096 2010-12-16 15:40 markitup drwxr-xr-x 7 oli oli 4096 2011-01-16 16:58 media drwxr-xr-x 3 oli oli 4096 2010-12-16 15:41 post drwxr-xr-x 9 oli oli 4096 2010-09-16 05:23 templates FILES -rw-r--r-- 1 oli oli 5361664 2010-09-06 16:32 db.db -rw-r--r-- 1 oli oli 0 2008-12-11 09:22 __init__.py -rwxr-xr-x 1 oli oli 542 2008-12-11 09:22 manage.py -rw-r--r-- 1 oli oli 13 2010-03-23 18:14 settingsdev.py -rw-r--r-- 1 oli oli 2642 2010-12-16 15:40 settings.py -rw-r--r-- 1 oli oli 1818 2010-12-16 15:40 urls.py -rw-r--r-- 1 oli oli 432 2010-06-22 20:54 views.py

И с аргументами:

ls -a DIRECTORIES drwxr-xr-x 8 oli oli 4096 2011-01-12 00:46 . drwxr-xr-x 19 oli oli 4096 2011-04-13 17:24 .. drwxr-xr-x 6 oli oli 4096 2010-02-03 13:50 .bzr drwxr-xr-x 4 oli oli 4096 2010-12-16 15:40 markitup drwxr-xr-x 7 oli oli 4096 2011-01-16 16:58 media drwxr-xr-x 3 oli oli 4096 2010-12-16 15:41 post drwxr-xr-x 9 oli oli 4096 2010-09-16 05:23 templates FILES -rw-r--r-- 1 oli oli 65 2010-03-27 07:58 .bzrignore -rw-r--r-- 1 oli oli 5361664 2010-09-06 16:32 db.db -rw-r--r-- 1 oli oli 0 2008-12-11 09:22 __init__.py -rwxr-xr-x 1 oli oli 542 2008-12-11 09:22 manage.py -rw-r--r-- 1 oli oli 13 2010-03-23 18:14 settingsdev.py -rw-r--r-- 1 oli oli 2642 2010-12-16 15:40 settings.py -rw-r--r-- 1 oli oli 1818 2010-12-16 15:40 urls.py -rw-r--r-- 1 oli oli 432 2010-06-22 20:54 views.py
15
ответ дан 2 August 2018 в 03:28

Расширение настроек псевдонимов в .bashrc - это мой предпочтительный способ получения более удобных команд «ls». Мне особенно нравится «lf» (требуется установка «дерева»).

# some more ls aliases alias ll='ls -alF' alias la='ls -A' alias l='ls -CF' alias lf='tree -d -L 1'
2
ответ дан 2 August 2018 в 03:28

ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep "^l"

Показывает ... каталоги, нормальные файлы, ссылки в этом порядке.

Сделайте это псевдонимом, и вы готовы к работе.

Нашел другой метод:

ls -l --color -h --group-directories-first

Сначала он создает каталоги и окрашивает имена файлов.

В ~/.bashrc вы можете создать псевдоним для эта команда выглядит так:

alias ls1='ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep "^l"

Пример вывода:

drwxr-xr-x 5 96 2011-05-20 13:41 . drwxr-xr-x 16 xxxx uuuu 96 2010-03-05 12:34 .. drwx------ 2 xxxx uuuu 96 2009-02-13 14:31 .ssh drwxrwxr-x 2 xxxx uuuu 96 2009-12-03 13:49 .xxx drwxrwxr-x 5 xxxx uuuu 96 2010-12-06 15:51 xxxxxx -rw------- 1 xxxx uuuu 05 2011-05-20 14:12 .bash_history -rw-r--r-- 1 xxxx uuuu 20 2009-02-12 09:33 .bash_logout -rw-r--r-- 1 xxxx uuuu 29 2009-03-06 11:47 .bashrc -rw-r--r-- 1 xxxx uuuu 80 2011-05-20 13:42 fff -rw-rw-r-- 1 xxxx uuuu 03 2011-05-18 10:21 dffff

или для второго: alias ls2=ls -l --color -h --group-directories-first

Пример вывода: drwxrwxr-x 5 xxxx uuuu 4.0K 2010-12-06 15:51 ddddd -rw-r--r-- 1 xxxx uuuu 339M 2011-05-20 13:42 sssss -rw-rw-r-- 1 xxxx uuuu 4.6M 2011-05-18 10:21 dxsssss -rwxrwxr-x 1 xxxx uuuu 68 2011-02-22 15:55 5555 -rwxr--r-- 1 xxxx uuuu 20K 2010-12-06 16:11 ffff ddddd будет в другом цвете. добавьте -a, чтобы включить скрытые файлы.

, и для этого вы создали команду ls1 и ls2.

4
ответ дан 2 August 2018 в 03:28

Одним из самых мощных инструментов в Unix-системах является команда find. Мы можем использовать его для эмуляции вывода ls с флагом -ls и поиска по типу файла с флагом -type. Таким образом, то, что вы видите ниже, - это точно такая же команда, но с find поиск двух разных типов. printf заявления только говорят, что вы хотите, чтобы это объявление было первым.

printf "****DIRS****\n"; find . -maxdepth 1 -type d -ls; echo "****FILES****"; find . -maxdepth 1 -type f -ls

Вот пример вывода:

CURRENT DIR:[/home/xieerqi/bin] $ printf "****DIRS****"; find . -maxdepth 1 -type d -ls; echo "****FILES****"; find . -maxdepth 1 -type f -ls ****DIRS**** 5795516 4 drwxrwxr-x 8 xieerqi xieerqi 4096 Aug 19 16:25 . 5795514 4 drwxrwxr-x 2 xieerqi xieerqi 4096 Aug 19 15:27 ./c 5795511 4 drwxrwxr-x 2 xieerqi xieerqi 4096 Aug 19 15:27 ./python 5795153 4 drwxrwxr-x 2 xieerqi xieerqi 4096 Aug 19 15:41 ./perl 5795532 4 drwxrwxr-x 2 xieerqi xieerqi 4096 Aug 19 15:27 ./random 5795531 4 drwxrwxr-x 2 xieerqi xieerqi 4096 Aug 19 15:27 ./sh 5795141 4 drwxrwxr-x 2 xieerqi xieerqi 4096 Aug 19 15:27 ./cs2 ****FILES**** 5795538 4 -rw-rw-r-- 1 xieerqi xieerqi 178 Aug 19 16:25 ./somefile.txt 5795539 4 -rw-rw-r-- 1 xieerqi xieerqi 219 Aug 19 16:26 ./somefile2.txt

Обратите внимание, что find перечисляет все файлы, включая скрытые файлы с ведущей точкой, например .bashrc.

Теперь, чтобы облегчить доступ к этой команде, создайте псевдоним для этого в .bashrc. Я сделал так, как

alias ls2='printf "****DIRS****\n"; find . -maxdepth 1 -type d -ls; echo "****FILES****"; find . -maxdepth 1 -type f -ls '

Исходный bashrc с . .bashrc или выйдите и введите терминал. Ваш псевдоним теперь готов к использованию в любое время.

2
ответ дан 2 August 2018 в 03:28

Вот мой быстрый удар по этому вопросу.

$ function lss { ls -l --group-directories-first --time-style +%s $@ | grep -v '^total' | awk 'BEGIN {print("DIRS")} {if (f!=1 && $1 ~ /^-/) {print "\nFILES"; f=1}; printf("%s\t%s %s %s:%s\n", $7, $6, $1, $3, $4);}'; } $ alias ls='lss' $ ls DIRS directory0 1305901476 drwxr-xr-x ak:ak directory1 1305901476 drwxr-xr-x ak:ak FILES filename0 1305901484 -rw-r--r-- ak:ak filename1 1305901484 -rw-r--r-- ak:ak filename2 1305901484 -rw-r--r-- ak:ak filename3 1305901484 -rw-r--r-- ak:ak

Преимущество этого подхода в том, что он не требует нескольких обходов каталога и печатает вывод, когда он готов. Попробуйте запустить это после touch filename{0..10000} в качестве теста.

Опустите function и alias строки в ~/.bashrc, чтобы сделать его постоянным.

Бенчмаркинг от Oli:

oli@bert:~/Desktop$ mkdir test oli@bert:~/Desktop$ cd test oli@bert:~/Desktop/test$ mkdir dir{0..100000} oli@bert:~/Desktop/test$ touch filename{0..100000} oli@bert:~/Desktop/test$ time /bin/ls>/dev/null real 0m0.975s user 0m0.860s sys 0m0.110s oli@bert:~/Desktop/test$ time ls --group-directories-first -l >/dev/null real 0m1.810s user 0m1.210s sys 0m0.580s oli@bert:~/Desktop/test$ time lss>/dev/null # ændrük's method real 0m2.035s user 0m1.810s sys 0m0.780s oli@bert:~/Desktop/test$ time ~/bin/ls>/dev/null # Oli's method real 0m5.496s user 0m4.290s sys 0m1.460s
7
ответ дан 4 August 2018 в 19:25
  • 1
    Добавлен некоторый бенчмаркинг на ваш пост (как вы упомянули). Да, более 100 000 каталогов и 100 000 файлов, ваш занимает меньше половины времени. Но ls по-прежнему намного быстрее. В любом случае, это край. Большинство людей никогда не имеют таких огромных списков каталогов. Для нормальных людей наблюдается небольшая заметная разница. Ницца awk, хотя. +1 – Oli♦ 20 May 2011 в 20:25

Моим последним ls мод в ~/bin является:

#!/bin/bash ACCOUNT_ID=$UID # #SET ACCOUNT_NAME ACCOUNT_NAME=$( cat /etc/passwd | grep $ACCOUNT_ID | cut -d: -f1 ); ls -l -F --color -h --group-directories-first $1 |\ sed "s/$ACCOUNT_NAME/\$USER/g" | ack --passthru --color \\\$USER ;

P.S. Должен был назвать его ~/bin/myls или он зависает в цикле, который никогда не достигнет ls системы.

Пример:

$ sudo mkdir -vp /temp/Nother_DIR | tee -a /tmp/record mkdir: created directory `/temp' mkdir: created directory `/temp/Nother_DIR' $ sudo chown -vR $USER:$USER /temp | f | tee -a /tmp/record changed ownership of `/temp/Nother_DIR' to $USER:$USER changed ownership of `/temp' to $USER:$USER $ cd /temp $ touch a b c d $ ln -sv d e | tee -a /tmp/record `e' -> `d' $ ln -sv e f | tee -a /tmp/record `f' -> `e' $ myls | tee -a /tmp/record total 4.0K drwxr-xr-x 2 $USER $USER 4.0K Sep 19 00:46 Nother_DIR -rw-r--r-- 1 $USER $USER 0 Sep 19 00:46 a -rw-r--r-- 1 $USER $USER 0 Sep 19 00:46 b -rw-r--r-- 1 $USER $USER 0 Sep 19 00:46 c -rw-r--r-- 1 $USER $USER 0 Sep 19 00:46 d lrwxrwxrwx 1 $USER $USER 1 Sep 19 00:46 e -> d lrwxrwxrwx 1 $USER $USER 1 Sep 19 00:46 f -> e
0
ответ дан 4 August 2018 в 19:25

ls не поддерживает значительную настройку выходного файла.

Используйте

ls --group-directories-first -l

, чтобы сначала получить каналы.

Посмотрите на лимузин (не установлен по умолчанию) для альтернативы ls, который поддерживает больше настройки вывода (но не поддерживает все опции ls)

1
ответ дан 4 August 2018 в 19:25

Мой последний мод ls в ~ / bin:

#!/bin/bash ACCOUNT_ID=$UID # #SET ACCOUNT_NAME ACCOUNT_NAME=$( cat /etc/passwd | grep $ACCOUNT_ID | cut -d: -f1 ); ls -l -F --color -h --group-directories-first $1 |\ sed "s/$ACCOUNT_NAME/\$USER/g" | ack --passthru --color \\\$USER ;

Извините за формат сообщения. Пытался использовать его с помощью copy / paste, но, возможно, не пошел. Ура! Постскриптум Должен назвать его ~ / bin / myls или он будет висеть в цикле, который никогда не достигнет ls системы.

-1
ответ дан 4 August 2018 в 19:25

Вы можете написать скрипт bash под названием ~/bin/ls, который должен переопределить /bin/ls. не забудьте запустить chmod +x ~/bin/ls.

Я только что написал это, что, кажется, делает большую часть того, что вы хотите выполнить (в том числе прохождение дополнительных аргументов)

#!/bin/bash DIRS="`/bin/ls --color=auto -l $@ | grep ^d`" FILES="`/bin/ls --color=auto -l $@ | grep ^\-`" if [ "$DIRS" ] then echo "DIRECTORIES" echo -e "$DIRS\ " fi if [ "$FILES" ] then echo "FILES" echo "$FILES\ " fi

Кто-то может хотите немного убрать это или улучшить форматирование вывода, но там вы идете.

И вот какой-то оригинальный вывод:

ls DIRECTORIES drwxr-xr-x 4 oli oli 4096 2010-12-16 15:40 markitup drwxr-xr-x 7 oli oli 4096 2011-01-16 16:58 media drwxr-xr-x 3 oli oli 4096 2010-12-16 15:41 post drwxr-xr-x 9 oli oli 4096 2010-09-16 05:23 templates FILES -rw-r--r-- 1 oli oli 5361664 2010-09-06 16:32 db.db -rw-r--r-- 1 oli oli 0 2008-12-11 09:22 __init__.py -rwxr-xr-x 1 oli oli 542 2008-12-11 09:22 manage.py -rw-r--r-- 1 oli oli 13 2010-03-23 18:14 settingsdev.py -rw-r--r-- 1 oli oli 2642 2010-12-16 15:40 settings.py -rw-r--r-- 1 oli oli 1818 2010-12-16 15:40 urls.py -rw-r--r-- 1 oli oli 432 2010-06-22 20:54 views.py

И с аргументами:

ls -a DIRECTORIES drwxr-xr-x 8 oli oli 4096 2011-01-12 00:46 . drwxr-xr-x 19 oli oli 4096 2011-04-13 17:24 .. drwxr-xr-x 6 oli oli 4096 2010-02-03 13:50 .bzr drwxr-xr-x 4 oli oli 4096 2010-12-16 15:40 markitup drwxr-xr-x 7 oli oli 4096 2011-01-16 16:58 media drwxr-xr-x 3 oli oli 4096 2010-12-16 15:41 post drwxr-xr-x 9 oli oli 4096 2010-09-16 05:23 templates FILES -rw-r--r-- 1 oli oli 65 2010-03-27 07:58 .bzrignore -rw-r--r-- 1 oli oli 5361664 2010-09-06 16:32 db.db -rw-r--r-- 1 oli oli 0 2008-12-11 09:22 __init__.py -rwxr-xr-x 1 oli oli 542 2008-12-11 09:22 manage.py -rw-r--r-- 1 oli oli 13 2010-03-23 18:14 settingsdev.py -rw-r--r-- 1 oli oli 2642 2010-12-16 15:40 settings.py -rw-r--r-- 1 oli oli 1818 2010-12-16 15:40 urls.py -rw-r--r-- 1 oli oli 432 2010-06-22 20:54 views.py
15
ответ дан 4 August 2018 в 19:25

Расширение настроек псевдонимов в .bashrc - это мой предпочтительный способ получения более удобных команд «ls». Мне особенно нравится «lf» (требуется установка «дерева»).

# some more ls aliases alias ll='ls -alF' alias la='ls -A' alias l='ls -CF' alias lf='tree -d -L 1'
2
ответ дан 4 August 2018 в 19:25

Другие вопросы по тегам:

Похожие вопросы: