シェルプログラミングでディレクトリ名を変更する方法

このQ&Aのポイント
  • シェルプログラミングを使用して、ファイル操作でディレクトリ名を変更する方法について解説します。
  • 具体的な処理手順として、日付けの昇順にソートされたディレクトリを新しいディレクトリに順次コピーする方法を紹介します。
  • 初級プログラマーでも理解しやすいように、コードの書き方や変更後のディレクトリの命名方法についても指示します。
回答を見る
  • ベストアンサー

シェルプログラミング ファイル操作 ディレクトリ名の変更

<変更前> 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 より

  • p-g
  • お礼率45% (5/11)

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

  • ベストアンサー
  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.1

おはようございます。SE じゃないんですが、サブディレクトリの中身は いじらなくていいのですね。それならディレクトリ名を mv で変更すれば わざわざコピーしなくていいでしょう。 サブディレクトリ名もすでに日付名がついているようですし、 ソートはシェルに任せて大丈夫ですね。 #!/bin/bash cd logs # ちゃんと logs ディレクトリに到達するようパスを適宜書き換えてください i=1 for dir in * do mv $dir 4-$i i=$((i+1)) # bash では変数の計算ができます done こんなところでどうでしょう。

p-g
質問者

お礼

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

関連するQ&A

  • ファイル操作 ディレクトリ名の変更

    <変更前> 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 より

    • ベストアンサー
    • Java
  • 【シェル】日付が最も古くサイズが小さいファイル削除

    ディレクトリ内のファイルで、日付が最も古い&(且つ)サイズが小さいものを削除するシェルを作成しようと考えています。 当初の以下のような考えをしていましたが、うまくいかないので質問しました・・・ ls -lStr(カレントディレクトリで日付が古くサイズが小さい順のつもり・・・) 上記のコマンド実行にて、 合計 100 -rwxr-xr-x 1 root root 333 2月 22 2009 java.log と表示されるのを利用し、上から2行目のファイル名を取得するためawkして『java.log』というファイル名をprintfで表示させ変数か何かに格納し、rmコマンドで削除という流れを考えていました。 よくよく考えると ・ls -lStr は本当に日付が古くサイズが小さいものでソートされているのか ・lsコマンドで表示した『2行目』という指定でファイル名の取得できるのか がよくわからなくなってしまいました。 上記の考え方よりこっちのほうが良い!やアドバイスがあれば非常に嬉しいです。 よろしくお願いしますm(__)m

  • csvファイルの読込みとソート

    いつも大変参考にさせていただいております。 csvファイルの読み込みとソートをしたく、ネットや過去ログ等を相当調べたのですが、完全に詰まってしまいました。 (検索キーワード:「php csv ソート」「php 二次元配列 ソート」など) とても困っています。どなたかよろしくお願いします。 以下のようなcsvファイルを読み込みソートしたいのです。 ■csvファイル 20110803, A, りんご 20111215, B, みかん 20110306, A, みかん 20110620, A, りんご 20110215, B, りんご ■個別にやりたい処理 (1)、左列の日付で昇順ソートしてすべて表示 (2)、「A」を含む行をすべて表示(日付順) (3)、「A」+「りんご」を含む行をすべて表示(日付順) □補足 csvをfgetcsvで読み込み、テーブルに入れて表示するところまではできました。 csvの行は増えていきます(max100行位)。列は固定。

    • ベストアンサー
    • PHP
  • フォルダの日付は変更できる?

    ファイルを整理してフォルダに分類したのですが、 日付順にソートして表示させてた時、 中身の日付と一致していないので、 (フォルダは今作ったら、今日の日付のため) 表示させたい順番になりません(^_^;) フォルダの日付って、任意に変更できないのでしょうか? よろしくお願いします<(_ _)>

    • ベストアンサー
    • Mac
  • tomcat5.5のログファイル名称の変更について

    tomcat5.5では「%CATALINA_HOME%\logs\」以下にログが出力されますが、 これらは「localhost.2010-03-12.log」といったように日付ごと作成されます。 これを「localhost.log」のように日付無しで出力させたいのですが、方法はあるのでしょうか? ぐぐったところ年、月でファイルを変更する方法はjar入れ替えという形になっているようなので、設定ファイルなどの変更では不可能なのでしょうか? 年、月でログを切り替える方法↓ http://jomura.net/wiki/index.php?Tomcat5.5%286.0%29%E3%81%AE%E3%83%AD%E3%82%B0%E3%82%92%E6%9C%88%28%E5%B9%B4%29%E6%AC%A1%E5%88%87%E6%9B%BF%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B 以上、よろしくお願い致します。

    • ベストアンサー
    • Java
  • 複数のフィードの読み込みが日付順にならない

    google feed API を使用して、複数のフィードを読み込み、日付順にソートするページを制作しております。複数のフィードの読み込みは実装できたのですが、順番が日付順の部分とそうでない部分がまざって、法則性が不明な順番でソートされてしまいます。 フィードは、RSS1.0/RSS2.0/Atom などいろいろなブログサービスのものを読み込んでいるのですが、このあたりが原因ではないかと探っています。 種類の違うフィードを読み込むときの注意点などあるのでしょうか?

  • バッチファイル作成で又また困っています。

    ・質問No (No.2233751)でCSVファイルの結合でお世話になったyazaemonです。皆様に助けて頂いたばかりですが、上司より過去のLogもHOSTへFTPしたいので・・・出来ないかとの「とほほ」が入りまして、教えていただいた「FOR /F "delims="」を使い考えましたが挫折しています。すみませんがご教授お願いします。 〔内容〕  D:\data\CL_Logs\Logs\でLogsフォルダー内にYYYMMDD形式で名前の付いたフォルダー(2年分のフォルダー:365x2=約730個)が有ります。そのフォルダー内には、それぞれ300件以上のCSVファイルが有ります。今後の日付でのCSVファイルの結合とFTPは助けていただいてバッチシOKとなりました。  今回はLogsフォルダー下の過去の日付のフォルダー(例:20050505)内の300件以上のCSVファイルの内容を結合した2005050.CSVを作成し、FTPすると言うものです。  〔ヘナチョコ未完成バッチ〕 @echo off setlocal set TARGET_DIR=D:\data\CL_Logs\Logs cd /d %TARGET_DIR% dir /ON /B > dirlist.dat FOR /F "delims=" %%i in (dirlist.dat) do type "%%i" >>dir.csv ---ここで行き詰まりです。 Logsフォルダーにdir.cvsを作りそれをFORコマンドで利用しと思い試しましたが玉砕しました。理論適には多分dir.csvの1行目にcdしcsvファイル用のfilelist.datを ・dir /ON /B JL*.csv >filelist.datの様に作成し、 ・FOR /F "delims=" %%i in (filelist.dat) do type "%%i" >>??? の様にすれば結合したcsvが出来るのだろうと思いますが技量が全く足りません。又、>>???のファイル名をCSVが入っているカレントの過去の日付の(例:20050505.csv)にする方法とかは検討も付きません。  厚かましいお願いですが宜しくお願いいたします。

  • バッチファイル作成で困っています。こんな事出来ますか?

    ・仕事で初めてバッチファイルを作っていますが、CSVファイルの連番が思っていたのと違う為出来なくて困っています。どうか教えてください。 作業内容を記します。 〔内容〕  ・Logフォルダー内に今300件以上のCSVファイルが有ります。  (Logフォルダーの名前は日付で毎日0:00に更新され、yyyymmdd形式です。例:今日が6/22だと「20060623」)  ・Logフォルダー内のCSVファイルの名前はCL増設時以下の規則で付いています。(今後CL数が増えればCSVファイルの数も増加します。) CL0001  CL0010  CL0020 ・・・  ↓    ↓    ↓ CL0009  CL0019  CL0029 ・・・ CL000a  CL001a  CL002a ・・・  ↓    ↓    ↓ CL000f  CL001f  CL002f ・・・  ・0:00以降、上記CSVを全て1つのCSVファイルに結合し、名前を日付から1を引いて昨日の日付(例:「20060622」に変更して汎用Hostに0:30分にFTPで送ります。 ・昨夜DOS系のサイトを必死で検索し恥ずかしいのですが、以下の様な バッチを始めて作成したのですが、CSVファイルが16進で付いているのを知らずCL0001~CL0999で作ってしまいました。現在、a~fのところが自分ではどうして良いか全く分かりません。又、Error処理が検索サイトの解説を読んでも旨く出来ません。 〔バッチ〕 @echo off setlocal set da=%date:~0,4%%date:~5,2%%date:~8,2% set /a x=%da%-1 d: cd "D:\data\CL_Logs\Logs\%x% for /l %%n in (1 1 9) do type JL000%%n.csv >> %x%.csv for /l %%n in (10 1 99) do type JL00%%n.csv >> %x%.csv for /l %%n in (100 1 999) do type JL0%%n.csv >> %x%.csv ftp -s:c:\Logs_ftp.txt >> ftp.log endlocal ・CSVファイルのの「CLxxxx」の番号はCLが無くなると欠番になりますが、その処理は必要無いと思っています。 どうか宜しくお願いいたします。

  • javaのソートについて。

    うまく文章で伝えられないかもしれませんがお願いします。 csvファイルの中に 名前、住所、電話番号、アドレス と入った一文が複数あるとします。 これを名前の50音順に並べたいのですが、 文字でもArrays.sortでソートは可能でしょうか? 一応やってみたのですがうまくいきませんでした。 さらに質問なんですが私はこのcsvファイルの一文を削除したり、変更したりというプログラムを作っています。 変更や削除の場合は一度配列に全ての文を入れてその後削除、変更を行った後に またファイルに書き込むという形をとっています。 この場合50音順に並べるには一度書き込みが終った後もう一度読み込んでソートをして 書き込みなおすしか方法はないのでしょうか? ご教授お願いします。

    • ベストアンサー
    • Java
  • フォルダの表示順が変わって時間がかかるようになった

    PCのフォルダ表示に関して質問させていただきます PC上で録画をよく行うので、それ専用のHDDを準備して 録画データを保存しています 以前まで『日付時刻』の順にデータをソートしていて フォルダを開いたらソートした順番通りにすぐ表示されていたのですが 近頃、開いた直後にまず『名前』順にデータを並べて表示して そこから”日付時刻”順に並べ直す、という表示に代わってしまいました 表示に時間がかかるようになりましたし、何かディスクに 負担をかけてる感がしてスゴく嫌な気持ちになるので 直したいと思っています その手順を教えてもらえないでしょうか? ヨロシクお願いします。

専門家に質問してみよう