以下のようにスクリプトを修正し、引数で渡されたファイル名の一部と合致するファイルを検索して処理するようにします。このスクリプトでは、引数で指定されたファイル名の一部に合致するファイルをディレクトリ内で検索し、そのファイルを対象に検索処理を行います。
#!/bin/bash
# 検索対象のディレクトリ
DIRECTORY="/path/to/directory"
# コマンドライン引数のチェック
if [ "$#" -ne 4 ]; then
echo "Usage: $0 <file1_part> <search_term1> <file2_part> <search_term2>"
exit 1
fi
# コマンドライン引数の取得
FILE_PART1="$1"
SEARCH_STRING1="$2"
FILE_PART2="$3"
SEARCH_STRING2="$4"
# 一次ファイル
TEMP_FILE="/tmp/search_results.txt"
# 負けパーションファイルの検索
MATCHED_FILES1=$(find "$DIRECTORY" -type f -name "*$FILE_PART1*")
MATCHED_FILES2=$(find "$DIRECTORY" -type f -name "*$FILE_PART2*")
# 初期化
> "$TEMP_FILE"
# ファイル1で検索
for FILE in $MATCHED_FILES1; do
echo "ファイル1(${FILE})の検索結果:" >> "$TEMP_FILE"
grep -n "$SEARCH_STRING1" "$FILE" >> "$TEMP_FILE"
COUNT=$(grep -c "$SEARCH_STRING1" "$FILE")
if [ "$COUNT" -ge 2 ]; then
echo "ファイル1の結果: 2行以上の結果が返されました" >> "$TEMP_FILE"
fi
echo "" >> "$TEMP_FILE"
done
# ファイル2で検索
for FILE in $MATCHED_FILES2; do
echo "ファイル2(${FILE})の検索結果:" >> "$TEMP_FILE"
grep -n "$SEARCH_STRING2" "$FILE" >> "$TEMP_FILE"
COUNT=$(grep -c "$SEARCH_STRING2" "$FILE")
if [ "$COUNT" -ge 2 ]; then
echo "ファイル2の結果: 2行以上の結果が返されました" >> "$TEMP_FILE"
fi
echo "" >> "$TEMP_FILE"
done
# 結果を表示
cat "$TEMP_FILE"
# 一時ファイルを削除
rm "$TEMP_FILE"
修正内容
- 一部ファイル名に合致するファイル検索:
find "$DIRECTORY" -type f -name "*$FILE_PART1*"で、DIRECTORY内の任意の場所でFILE_PART1を含むファイル名を持つファイルを検索し、MATCHED_FILES1に格納します。- 同様に、
find "$DIRECTORY" -type f -name "*$FILE_PART2*"でFILE_PART2を含むファイル名を持つファイルをMATCHED_FILES2に格納します。
- ファイル1での検索:
for FILE in $MATCHED_FILES1; doループ内で見つかった各ファイルに対して検索処理を行います。grep -n "$SEARCH_STRING1" "$FILE"で行番号付きで検索し、一時ファイルに出力します。- 検索結果の行数をカウントし、2行以上の場合はメッセージを追加します。
- ファイル2での検索:
- 同様に、
for FILE in $MATCHED_FILES2; doループ内で見つかった各ファイルに対して検索処理を行います。 grep -n "$SEARCH_STRING2" "$FILE"で行番号付きで検索し、一時ファイルに出力します。- 検索結果の行数をカウントし、2行以上の場合はメッセージを追加します。
使用例
以下のようにコマンドライン引数を指定してスクリプトを実行します。
./script_name.sh file1_part search_term_1 file2_part search_term_2
このコマンドでは、DIRECTORY 内の file1_part を含むファイルに対して search_term_1 を検索し、file2_part を含むファイルに対して search_term_2 を検索します。

コメント