• ベストアンサー

findして名前を変えてコピー(redhatlinux)

初心者で2~3日前からシェルを作っています。 環境:redhatlinux5 AAAディレクトリにある*.txtを全て探して BBBディレクトリに*_mmdd.txtに 名前を変えてコピーしたいのですが どのように書いたらよいのかわかりません。 名前を変えずにそのままコピーは以下のように すればできたのですが・・・ find /AAA -name "*.txt" -exec cp {} /BBB\; そこから先がわからないのでよろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

find /AAA -name "*.txt" -print | while read f do g=`echo "$f" | sed 's/\.txt$/_mmdd.txt/'` cp "$f" /BBB/"$g" done

brandnew43
質問者

お礼

無事にできました。 ありがとうございました。

その他の回答 (3)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.4

"mmdd"の部分は日付なんじゃないかと無駄にエスパーしてみます。 まぁdate辺りで拾えばいいとは思いますが。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

Linux だと言ってるんだから変数展開のときに置換すれば sed は不要なのではないかと>#2. 多分 cp "$f" /BBB/"${f/%.txt/_mmdd.txt}" でいいんじゃないかな.

brandnew43
質問者

お礼

ありがとうございました。 助かりました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「シェル」を作っているんですか? 「シェルスクリプト」じゃなく? という定番の突っ込みはさておき, シェル変数の IFS を適切に設定しつつ find, while, read を組み合わせればなんとでもなりそう. ファイル名に空白が入らないことが保証できるなら, IFS の設定も不要になります.

関連するQ&A