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
リンク
コメント