電子書籍の厳選無料作品が豊富!

<変更前>
logs--|200308171633/log1.csv log2.csv log3.csv
--|200308181205/log1.csv log2.csv log3.csv
--|200308181731/log1.csv log2.csv log3.csv

<変更後>
logs--|4-1/log1.csv log2.csv log3.csv
--|4-2/log1.csv log2.csv log3.csv
--|4-3/log1.csv log2.csv log3.csv

<説明>
ルートディレクトリはlogsというフォルダ。
200308171633、200308181205、200308181731というような日付けのディレクトリを
日付順に4-1、4-2、4-3と言うディレクトリに変更したい。
log1.csv log2.csv log3.csv のファイル名はそのままにしたい。

この処理をシェルプログラミングを使用し自動化したいと考えております。
現在考えておりますのは日付け順にソートして読み込んで、それを順番に新しいディレクトリにコピーする
という構想はわかるのですがコーディングができません。

どなたか心優しいSEの方教えてください。

初級PG より

A 回答 (1件)

おはようございます。

SE じゃないんですが、サブディレクトリの中身は
いじらなくていいのですね。それならディレクトリ名を mv で変更すれば
わざわざコピーしなくていいでしょう。
サブディレクトリ名もすでに日付名がついているようですし、
ソートはシェルに任せて大丈夫ですね。

#!/bin/bash

cd logs
# ちゃんと logs ディレクトリに到達するようパスを適宜書き換えてください

i=1
for dir in *
do
mv $dir 4-$i
i=$((i+1)) # bash では変数の計算ができます
done

こんなところでどうでしょう。
    • good
    • 0
この回答へのお礼

for 文の使い方がわかりました。
とても参考になったとおもいます。
ありがとうございます。

お礼日時:2003/09/01 11:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!