アプリケーション開発ポータルサイト
ServerNote.NET
カテゴリー【CentOSDebianFreeBSD
【sh/bash】ファイル名に特定文字列を含むファイルを再帰的に一括検索する
POSTED BY
2023-04-16

以下のようなディレクトリ・ファイル名構成があるとして

top_dir
|--- sample_dir 
|     --- sample1_utf_file.txt
|     --- sample2_sjis_file.txt
|
|--- example_dir 
     --- example1_utf_file.txt
     --- example2_sjis_file.txt

「top_dir内(サブディレクトリ含む)に存在する、ファイル名に「sjis」を含むファイルを表示する」ような場合、以下のようにする

Shellsearch_file.shGitHub Source
#!/bin/sh

if [ "$2" = "" ]; then
 echo "Usage: $0 directory keyword"
 exit 0
fi

find $1 -type f | while read FILE
do
# if [ ! `echo ${FILE} | grep $2` ] ; then
 if [ `echo ${FILE} | grep $2` ] ; then
  echo ${FILE}
 fi
done

./search_file.sh 検索対象ディレクトリ 検索ファイル名

のようにして使う。

上記例だと以下のような感じ。

chmod a+x search_file.sh

./search_file.sh top_dir sjis

#実行結果

top_dir/sample_dir/sample2_sjis_file.txt
top_dir/example_dir/example2_sjis_file.txt

なお、逆に「特定の文字列をファイル名に含まないもの」を検索する場合、ソースのコメント行にあるように、

if [ ! `echo ${FILE} | grep $2` ] ; then

と、!をつけて否定条件にすればよい。

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

【キーワード検索】