【Linux】ファイル・ディレクトリのみの一覧を取得する方法


この記事はプロモーションを含みます。

Linux

特定のディレクトリ配下(サブディレクトリ含む)にあるファイルまたはディレクトリのみの一覧を取得する方法を解説します。

ファイルのみの一覧を取得する

特定のディレクトリ配下にあるファイルだけの一覧を取得する方法を説明します。

lsコマンドでファイル情報も取得する

ここでは、lsコマンドを使用して、ファイル情報を含めたファイルのみの一覧を取得する方法を説明します。

まず、普通に「ls -lR」コマンドで取得した場合ですが、黄文字の行のようにディレクトリも取得されています。

[root@SYUTAKUWEB01 ws]# ls -lR ./
.:
合計 0
drwxr-xr-x 2 root root 44 12月  6 20:48 dir1
-rw-r--r-- 1 root root  0 12月  6 20:47 file1.txt
-rw-r--r-- 1 root root  0 12月  6 20:47 file2.txt
-rw-r--r-- 1 root root  0 12月  6 20:47 file3.txt

./dir1:
合計 0
-rw-r--r-- 1 root root 0 12月  6 20:48 file1-1.txt
-rw-r--r-- 1 root root 0 12月  6 20:48 file1-2.txt

次に、ファイルのみを取得するサンプルです。
このコマンドについてですが、[ls -l]コマンドの結果で、先頭が[-]の行をカウントすることで、ファイルのみを取得しています。(ディレクトリは先頭が[d]になります。)

[root@SYUTAKUWEB01 ws]# ls -lR ./ | grep ^-
-rw-r--r-- 1 root root  0 12月  6 20:47 file1.txt
-rw-r--r-- 1 root root  0 12月  6 20:47 file2.txt
-rw-r--r-- 1 root root  0 12月  6 20:47 file3.txt
-rw-r--r-- 1 root root 0 12月  6 20:48 file1-1.txt
-rw-r--r-- 1 root root 0 12月  6 20:48 file1-2.txt

findコマンドで格納パスも取得する

ここでは、findコマンドを使用して、格納パスを含めたファイルのみの一覧を取得する方法を説明します。

相対パスで取得する

[root@SYUTAKUWEB01 ws]# find ./ -type f
./file1.txt
./file2.txt
./file3.txt
./dir1/file1-1.txt
./dir1/file1-2.txt

フルパスで取得する

[root@SYUTAKUWEB01 ws]# find ./ -type f | sed 's@\./@'`pwd`'/@g'
/home/ws/file1.txt
/home/ws/file2.txt
/home/ws/file3.txt
/home/ws/dir1/file1-1.txt
/home/ws/dir1/file1-2.txt

ディレクトリのみの一覧を取得する

特定のディレクトリ配下にあるディレクトリだけの一覧を取得する方法を説明します。

lsコマンドでファイル情報も取得する

ここでは、lsコマンドを使用して、ファイル情報を含めたディレクトリのみの一覧を取得する方法を説明します。

まず、普通に「ls -lR」コマンドで取得した場合ですが、黄文字の行のようにファイルも取得されています。

[root@SYUTAKUWEB01 ws]# ls -lR ./
./:
合計 0
drwxr-xr-x 2 root root 44 12月  6 20:48 dir1
drwxr-xr-x 2 root root 44 12月  6 21:33 dir2
-rw-r--r-- 1 root root  0 12月  6 20:47 file1.txt
-rw-r--r-- 1 root root  0 12月  6 20:47 file2.txt
-rw-r--r-- 1 root root  0 12月  6 20:47 file3.txt

./dir1:
合計 0
-rw-r--r-- 1 root root 0 12月  6 20:48 file1-1.txt
-rw-r--r-- 1 root root 0 12月  6 20:48 file1-2.txt

./dir2:
合計 0
-rw-r--r-- 1 root root 0 12月  6 21:33 file2-1.txt
-rw-r--r-- 1 root root 0 12月  6 21:33 file2-2.txt
~~省略~~

次に、ディレクトリのみを取得するサンプルです。
このコマンドについてですが、[ls -l]コマンドの結果で、先頭が[d]の行をカウントすることで、ファイルのみを取得しています。

[root@SYUTAKUWEB01 ws]# ls -lR ./ | grep ^d
drwxr-xr-x 2 root root 44 12月  6 20:48 dir1
drwxr-xr-x 2 root root 44 12月  6 21:33 dir2
drwxr-xr-x 2 root root 6 12月  6 21:36 dir1-1
drwxr-xr-x 2 root root 6 12月  6 21:36 dir1-2
drwxr-xr-x 2 root root 6 12月  6 21:36 dir2-1
drwxr-xr-x 2 root root 6 12月  6 21:36 dir2-2

環境によっては「ls」コマンドに「a」オプションを付けてエイリアスとして登録されている場合があります。(lsコマンドを使うと「ls -a」として実行される)

このような場合、先に説明した方法だと、以下のように「..」などが表示されてしまいます。

[root@SYUTAKUWEB01 ws]# ls -alR ./ | grep ^d
drwxr-xr-x   4 root root  81 12月  6 21:33 .
drwxr-xr-x. 10 root root 129 12月  6 20:47 ..
drwxr-xr-x   4 root root  72 12月  6 21:36 dir1
drwxr-xr-x   4 root root  72 12月  6 21:36 dir2
drwxr-xr-x 4 root root 72 12月  6 21:36 .
drwxr-xr-x 4 root root 81 12月  6 21:33 ..
drwxr-xr-x 2 root root  6 12月  6 21:36 dir1-1
drwxr-xr-x 2 root root  6 12月  6 21:36 dir1-2

「..」などを表示せずに、一覧を取得するには、以下のようなコマンドを実行する必要があります。

[root@SYUTAKUWEB01 ws]# ls -alR ./ | grep ^d | grep -ve ' \.\.' -ve ' \.'
drwxr-xr-x   4 root root  72 12月  6 21:36 dir1
drwxr-xr-x   4 root root  72 12月  6 21:36 dir2
drwxr-xr-x 2 root root  6 12月  6 21:36 dir1-1
drwxr-xr-x 2 root root  6 12月  6 21:36 dir1-2
drwxr-xr-x 2 root root  6 12月  6 21:36 dir2-1
drwxr-xr-x 2 root root  6 12月  6 21:36 dir2-2

findコマンドで格納パスも取得する

ここでは、findコマンドを使用して、格納パスを含めたディレクトリのみの一覧を取得する方法を説明します。

相対パスで取得する

[root@SYUTAKUWEB01 ws]# find ./ -mindepth 1 -type d
./dir1
./dir1/dir1-1
./dir1/dir1-2
./dir2
./dir2/dir2-1
./dir2/dir2-2

フルパスで取得する

[root@SYUTAKUWEB01 ws]# find ./ -type d | sed 's@\./@'`pwd`'/@g'
/home/ws/
/home/ws/dir1
/home/ws/dir1/dir1-1
/home/ws/dir1/dir1-2
/home/ws/dir2
/home/ws/dir2/dir2-1
/home/ws/dir2/dir2-2

コメント

タイトルとURLをコピーしました