0
0

シェルで一斉にファイルコピーメモ

Posted at

複数ファイルを、文字列一括置換

#!/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."

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0