【bashシェル】ファイルの一覧を元にループ処理を行う


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

bashシェル

bashシェルスクリプトで、ファイルの一覧を元にして、ループ処理を行う方法を解説します。

はじめに

本記事では、ディレクトリ配下のファイル一覧を取得し、それを元にループ処理を行う方法を説明します。
ファイルの一覧を取得する方法は様々な方法がありますが、ここでは「ls」と「find」コマンドを使用したサンプルを記載しています。

lsコマンドを使用したサンプル

ここでは「ls」コマンドを使用してループする方法を説明します。

#!/bin/bash

for file in $(ls -1 /home/data/*.*); do

	# ファイル数をカウント
	count=`expr ${count} + 1`

	# ファイル数とファイル名を表示
	echo ファイル${count}:${file}

done

上記サンプルの実行結果です。
ディレクトリ直下のファイル一覧を取得する場合は「ls」コマンドでもいいですが、サブディレクトリなども含める場合は後述する「find」コマンドを使用する方がやりやすいかと思います。

ファイル1:/home/data/file1.log
ファイル2:/home/data/file1.txt
ファイル3:/home/data/file2.log
ファイル4:/home/data/file2.txt
ファイル5:/home/data/file3.log
ファイル6:/home/data/file3.txt

findコマンドを使用したサンプル

ここでは「find」コマンドを使用してループする方法を説明します。

指定したディレクトリ(例では[/home/data/])配下にある「*.log」に合致するファイルのみを取得する例です。

for file in $(find /home/data/ -type f -name "*.log"); do

	# ファイル数をカウント
	count=`expr ${count} + 1`

	# ファイル数とファイル名を表示
	echo ファイル${count}:${file}

done

上記サンプルの実行結果です。
サブディレクトリも含めてファイル情報が取得されていることが分かります。

ファイル1:/home/data/dir1/text1.log
ファイル2:/home/data/dir2/text2.log
ファイル3:/home/data/dir3/text3.log
ファイル4:/home/data/file2.log
ファイル5:/home/data/file3.log
ファイル6:/home/data/file1.log

並び順がバラバラになっていますが、「sort」コマンドを使用することで並び替えることも出来ます。

for file in $(find /home/data/ -type f -name "*.log" | sort); do

	# ファイル数をカウント
	count=`expr ${count} + 1`

	# ファイル数とファイル名を表示
	echo ファイル${count}:${file}

done

上記の実行結果です。並び順が綺麗になりました。

ファイル1:/home/data/dir1/text1.log
ファイル2:/home/data/dir2/text2.log
ファイル3:/home/data/dir3/text3.log
ファイル4:/home/data/file1.log
ファイル5:/home/data/file2.log
ファイル6:/home/data/file3.log

コメント

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