Удалить количество жестких ссылок из вывода команды `ls -al`

Я также использую Linux Mint 18 (Сара). Примерно несколько месяцев назад эта проблема стала возникать и у меня (и это все еще проблема №1 с моим ноутбуком).

Я пытался найти решение в справочной системе Linux Mint около 3 месяцев назад. Ребята сказали мне, что наверное какая-то проблема / баг с индикатором xfce. Поэтому они советуют мне использовать эту команду для перезапуска nm:

sudo service network-manager restart

, что на самом деле работает , но - не каждый раз в моем случае. Иногда мне нужно выйти и снова войти в систему (Ctrl + Alt + Backspace).

РЕДАКТИРОВАТЬ: Ну, через некоторое время я решаю отредактировать этот пост. Причина - я нашел способ! Наконец, мне больше не нужно выходить из системы;

killall nm-applet; nohup nm-applet &

1
28.06.2018, 08:28
3 ответа

Если вы не хотите видеть ссылки во втором столбце, вы можете передать ls -alв awk, чтобы удалить его:

ls -al | awk '{$2=""; print $0}'

Будет напечатан весь столбец, кроме второго, с использованием стандартного разделителя, в данном случае пробела.

В моей среде столбцы для даты последнего изменения — 6, 7 и 8, используя пробел в качестве разделителя, чтобы избавиться от них и второго столбца:

ls -la | awk '{$2=$6=$7=$8=""; print $0}'

Если вам не нужны или вы не хотите видеть некоторые из столбцов, вы можете использовать приведенный выше синтаксис в качестве модели для удаления нужных вам столбцов. Ничего не повредит. Если вы просто хотите видеть все столбцы, чтобы ничего не пропустить, то используйте стандартный:

ls -al

Если вам нужен псевдоним, добавьте следующее в ~/.bashrc:

la() {
    ls -la | awk '{$2=$6=$7=$8=""; print $0}'
}

Это функция, которая ведет себя точно так же, но без учета и экранирования одинарных и двойных кавычек. Я использовал la, так как llдает синтаксическую ошибку, так как это уже псевдоним в моей среде.

2
27.01.2020, 23:23

Чтобы удалить количество жестких ссылок из вывода ls -l, оставив остальную часть строки нетронутой:

ls -l | sed -E '2,$s/ +[0-9]+//'

Замена sedудалит первый набор цифр и любой пробел перед ним в каждой строке после первой строки (первая строка содержитtotal).

Как функция

myls () {
    command ls -l "$@" | sed -E '2,$s/ +[0-9]+//'
}

Эта функция вызывает ls -lс любыми другими аргументами командной строки, заданными пользователем функции перед отправкой результата через sed.

Используя command ls, мы гарантируем, что, если вы позже решите переименовать функцию в ls, функция не будет вызывать себя рекурсивно.

Пример:

$ ls -la ~/.skel
total 18
drwxr-xr-x  2 kk    wheel  512 May  4 16:29.
drwxr-xr-x  3 kk    wheel  512 Jun 28 08:15..
-rw-r--r--  1 kk    wheel   87 Nov  1  2017.Xdefaults
-rw-r--r--  1 kk    wheel  771 Feb  9 10:18.cshrc
-rw-r--r--  1 kk    wheel  101 Nov  1  2017.cvsrc
-rw-r--r--  1 kk    wheel  359 Nov  1  2017.login
-rw-r--r--  1 kk    wheel  175 Nov  1  2017.mailrc
-rw-r--r--  1 kk    wheel  229 May  4 16:29.profile
-rw-r--r--  1 kk    wheel  108 Apr 15 12:50.vimrc
-rw-r--r--  1 kk    wheel    0 Apr 21 17:44.zshrc

$ myls -a ~/.skel
total
drwxr-xr-x  kk    wheel  512 May  4 16:29.
drwxr-xr-x  kk    wheel  512 Jun 28 08:15..
-rw-r--r--  kk    wheel   87 Nov  1  2017.Xdefaults
-rw-r--r--  kk    wheel  771 Feb  9 10:18.cshrc
-rw-r--r--  kk    wheel  101 Nov  1  2017.cvsrc
-rw-r--r--  kk    wheel  359 Nov  1  2017.login
-rw-r--r--  kk    wheel  175 Nov  1  2017.mailrc
-rw-r--r--  kk    wheel  229 May  4 16:29.profile
-rw-r--r--  kk    wheel  108 Apr 15 12:50.vimrc
-rw-r--r--  kk    wheel    0 Apr 21 17:44.zshrc

Вариант функции, которая действует в точности как ls, если вы не используетеls -l:

ls () (
    add_filter=0
    while getopts ':l' opt; do
        case $opt in
            l)  add_filter=1 ;;
            1)  add_filter=0
        esac
    done

    command ls "$@" | 
    if [ "$add_filter" -eq 1 ]; then
        sed -E '2,$s/ +[0-9]+//'
    else
        cat
    fi
)

Функция выполняет собственный анализ командной строки, чтобы определить, использовалась ли опция -l(, а также не отключена ли она позднее с помощью-1). Если да, то ставим флаг. Позже, если флаг был установлен, мы фильтруем вывод с lsпо sed. Если флаг не был установлен, мы просто передаем вывод, как -через cat.

1
27.01.2020, 23:23

С ast -open'sls(также встроенным lsksh93, если он был включен и /opt/ast/binопережает /binв $PATH), вы можете полностью указать выходной формат и опустить количество ссылок(%3(nlink)u)есть:

ls -rSZ '%(mode)s %-8(uid)s %-8(gid)s %8(device:case::%(size)u:*:%(device)s)s %(atime)s %(name)s%(linkop:case:?*: %(linkop)s %(linkpath)s)s'
0
27.01.2020, 23:23

Теги

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