Поиск по сайту:

[Советы по Bash] Как выполнить cd и ls одной командой

Всякий раз, когда я перехожу в каталог, следующее, что я делаю, самопроизвольно сделать — просмотреть содержимое этого каталога с помощью команды ls. Я не знаю, все ли из вас так делают, но думаю, у некоторых из вас может быть такая привычка. Было бы лучше, если бы мы объединили функциональность cd и ls в одной команде, не так ли? В этом кратком руководстве объясняется, как автоматически отображать содержимое каталога при каждом переходе в него в Linux.

Как cd и ls одной командой в Bash

Обратите внимание, что я не говорю об однострочных командах. Например, вы можете выполнить cd и ls с помощью однострочной команды, как показано ниже.

cd path-to-dir && ls

Или,

cd path-to-dir ; ls

Да, это работает! Но это не входит в задачу данного руководства. Мы сделаем это с помощью простой функции BASH. Этот трюк будет работать во всех Linux и Unix-подобных дистрибутивах, поддерживающих BASH.

Откройте файл ~/.bashrc в своем любимом редакторе:

nano ~/.bashrc

Добавьте в конце следующие строки:

cdls() {
        local dir="$1"
        local dir="${dir:=$HOME}"
        if [[ -d "$dir" ]]; then
                cd "$dir" >/dev/null; ls --color=auto
        else
                echo "bash: cdls: $dir: Directory not found"
        fi
}

Функция BASH для использования cd и ls в одной команде

Здесь я использовал имя функции как cdls(), чтобы было легче запомнить! Вы можете назвать эту функцию как угодно. Также замените параметр ls --color=auto на свой собственный. Сохраните и закройте файл.

Выполните следующую команду, чтобы изменения вступили в силу.

source ~/.bashrc

Теперь автоматически отображайте содержимое каталога при каждом переходе в него, как показано ниже.

Пример:

$ cdls /var/log/
alternatives.log  btmp                   dpkg.log   kern.log   syslog               wtmp
apt               cloud-init.log         faillog    landscape  syslog.1
auth.log          cloud-init-output.log  installer  lastlog    tallylog
bootstrap.log     dist-upgrade           journal    lxd        unattended-upgrades
sk@ubuntuserver:/var/log$ pwd
/var/log

cd и ls в одной команде в Bash

Вы также можете добавить следующую гораздо более простую функцию в свой файл ~/.bashrc.

cdls() {
        cd "$@" && ls;
}

Создайте файл ~/.bashrc, чтобы изменения вступили в силу. Также не используйте обе функции одновременно с одним и тем же именем. Либо используйте одну функцию, либо используйте разные имена (например, cdls и cl) для каждой функции.

До того, как я узнал об этом трюке, я обычно делал:

cd /var/log/

А потом;

ls

Или,

cd /var/log/ && ls

Уже нет! Теперь я могу получить список любого содержимого каталога, когда захожу в него. Это удобно, когда вы часто работаете с большим количеством каталогов.

Одним из недостатков этого трюка является то, что вам придется ждать от нескольких секунд до нескольких минут, прежде чем перейти в каталог, содержащий сотни и тысячи файлов. В таких случаях используйте обычную команду cd.

Рекомендуем прочитать:

  • Переименование файлов без двойного ввода полного имени в Linux
  • Советы по Bash: как выполнить cp или mv и cd одной командой
  • Различные способы отображения содержимого каталога без использования команды ls
  • Функция Bash для извлечения файловых архивов различных типов

Статьи по данной тематике