ウェブサイト検索

[Bashのヒント] 1つのコマンドでcdとlsを実行する方法


ディレクトリにcdするたびに、次に自然に行うのは、そのディレクトリの内容をlsコマンドで一覧表示することです。皆さん全員がこれをするかどうかはわかりませんが、習慣として持っている方もいるかもしれません。cdとlsの機能を1つのコマンドにまとめると便利ですよね? この簡単なガイドでは、Linuxでcdしたときに自動的にディレクトリの内容を表示する方法を説明します。

Bashでcdとlsを1つのコマンドで実行する方法

一行コマンドのことを話しているわけではないことにご注意ください。例えば、以下のように一行のコマンドでcdやlsを実行することはできます。

cd path-to-dir && ls

または、

cd path-to-dir ; ls

はい、確かに動作します!しかし、これはこのガイドの範囲ではありません。私たちは、簡単なBASH関数の助けを借りてこれを行います。このトリックは、BASHをサポートするすべてのLinuxおよびUnix系ディストリビューションで動作します。

お好みのエディタで ~/.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
}

cdとlsを1つのコマンドで使うBASH関数

ここでは、覚えやすさのために関数名を 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
Bashでcdとlsを1つのコマンドで実行する

また、次のはるかに簡単な関数をあなたの ~/.bashrc ファイルに追加することもできます。

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

変更を有効にするために、~/.bashrc ファイルを適用してください。また、同じ名前の関数を同時に使用しないでください。1つの関数を使用するか、各関数に異なる名前(例:cdls と cl)を使用してください。

このトリックを知る前、私は普段次のことをしていました:

cd /var/log/

そしてそれから;

ls

または、

cd /var/log/ && ls

もう違います!今では、ディレクトリにcdするたびにその内容を一覧表示できるようになりました。これは、頻繁に大量のディレクトリを扱う時に便利です。

このトリックの大きな欠点の一つは、何百、何千ものファイルを含むディレクトリにcdする際に、数秒から数分待たなければならないということです。そのような場合は、通常のcdコマンドを使用してください。

おすすめの読書:

  • Fishシェルで一つのコマンドでディレクトリを変更してファイルを一覧表示する方法
  • Linuxでファイル名を2回入力せずに名前を変更する
  • Bashのコツ - 1つのコマンドでcpやmvしてcdする方法
  • lsコマンドを使わずにディレクトリ内容を表示するさまざまな方法
  • さまざまな種類のファイルアーカイブを抽出する Bash 関数