複数ファイルを、文字列一括置換
#!/bin/bash
# 配列の定義
declare -a tasks=(
"/c/original/aaaa.txt:abc:cde:Abc:Cde"
"/c/original2/bbbb.txt:def:fgH:Aka:Midori"
)
# 配列の要素をループで処理
for item in "${tasks[@]}"; do
# ':' で区切られたファイルパスと変換ペアを分離
IFS=":" read -r src_file -a transformations <<< "$item"
# 一時ファイルの作成
temp_file=$(mktemp)
# 元のファイル内容を一時ファイルにコピー
cp "$src_file" "$temp_file"
# 各変換ペアについて処理
for (( i=0; i<${#transformations[@]}; i+=2 )); do
from="${transformations[i]}"
to="${transformations[i+1]}"
# 一時ファイルでの文字列置換
sed -i "s/${from}/${to}/g" "$temp_file"
done
# 置換後の内容を元のファイルに上書き
mv "$temp_file" "$src_file"
done
echo "All files processed and transformations applied successfully."
複数ファイルを一括コピー&リネーム
#!/bin/bash
# 配列の定義
declare -a files=( "/c/original/aaaa.txt:/c/src/data/" "/c/original/bbbb.txt:/c/src/data/" )
# 配列の要素をループで処理
for item in "${files[@]}"; do
# ':' で区切られたファイルパスとディレクトリを分離
IFS=":" read -r src_file dest_dir <<< "$item"
# コピー先に data.txt が存在する場合は削除
if [ -f "${dest_dir}data.txt" ]; then
rm "${dest_dir}data.txt"
fi
# ファイルをコピー先にコピー
cp "$src_file" "$dest_dir"
# コピーしたファイルを data.txt にリネーム
mv "${dest_dir}$(basename "$src_file")" "${dest_dir}data.txt"
done
echo "All files processed successfully."