![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
現在仕事でPerlのプログラムを使用しています。(これは今はいらっしゃらない上司に作ってもらいました)
使用しているのはLinuxでOSは「Fedora」です。
それで以下のようなツリー構成のデータをディレクトリに分けたいんです。
↓
ディレクトリ『A』の中に「***A_1.bz2」「***A_2.bz2」「***A_3.bz2」「***A_4.bz2」
ディレクトリ『B』の中に「***B_1.bz2」「***B_2.bz2」「***B_3.bz2」「***B_4.bz2」
こういったディレクトリが『A』~『L』まであるとします。
これを拡張子前の「1」~「4」の数字別にディレクトリを作って下のように分配していきたいんです。
●『1』のディレクトリ内ー「***A_1.bz2」・「***B_1.bz2」~「***L_1.bz2」
『2』のディレクトリ内ー「***A_2.bz2」・「***B_2.bz2」~「***L_2.bz2」
『3』のディレクトリ内ー「***A_3.bz2」・「***B_3.bz2」~「***L_3.bz2」
『4』のディレクトリ内ー「***A_4.bz2」・「***B_4.bz2」~「***L_4.bz2」
こういったことをやるために以下のようなプログラムを使用しています。
--------------------------------------------------------------------------
$path0="/home/***********/****/**";
# output directory
system( "mkdir $path0/1" );
system( "mkdir $path0/2" );
system( "mkdir $path0/3" );
system( "mkdir $path0/4" );
opendir( DIR, $path0);
@dlist = readdir( DIR );
closedir( DIR );
foreach $dname ( @dlist ){
if( $dname=~/B/ ){
$path1=$path0.'/'.$dname;
# print( "$path1\n" );
chdir( $path1 );
# unzip bz
system( "bzip2 -d *bz2" );
opendir( DIR, $path1);
@flist = readdir( DIR );
closedir( DIR );
foreach $fname ( @flist ){
print( "$fname\n" );
if ( $fname=~/*1/){ $exec="mv $fname $path0/1/"; }
elsif( $fname=~/*2/){ $exec="mv $fname $path0/2/"; }
elsif( $fname=~/*3/){ $exec="mv $fname $path0/3/"; }
elsif( $fname=~/*4/){ $exec="mv $fname $path0/4/"; }
system( "$exec" );
}
}
}
--------------------------------------------------------------------------------
※ ( $fname=~/*1/) の辺りはちょっと適当です。
このプログラムですと、分配まではできるのですが元々あり空になってしまった『A』~『L』のディレクトリが残ってしまいます。
この空のディレクトリを削除するにはどういったプログラムを追加したらいいでしょうか?
すみませんが、どなたかよろしくお願いします。
No.3
- 回答日時:
「空のディレクトリを削除する」だけなら, 素直に rmdir すればいいと思うんだ... けど, これいつの時代の Perl なんだろ....
ついでにいえば mkdir や mv をなんで system 経由で実行しているんだろうかとか, パスの作り方にしても
system( "mkdir $path0/1" );
と
$path1=$path0.'/'.$dname;
とが混在しているのが気になる.
No.1
- 回答日時:
補足要求です。
$path0="/home/***********/****/**";
のディレクトリ下に
A
B
C
・・途中省略・・
L
のディレクトリがあるのでしょうか?
そうだとすると、
foreach $dname ( @dlist ){
if( $dname=~/B/ ){・・・・①
①の行でif が成立するのはBのディレクトリだけです。
A,C,D,E,F,G,H,I,J,K,Lのディレクトリの中のファイルは処理されませんが、
それは、想定した動作なのでしょうか?
回答ありがとうございます。
一応捕捉にも書きましたが、今回のディレクトリ名は仮の名前にしていました。
ごちゃごちゃになってしまい大変申し訳ありませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ライブ・コンサート・クラブ Bzの話 1 2022/12/21 00:03
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- Visual Basic(VBA) Excel VBA でデータ転記について 1 2023/03/07 19:11
- Mac OS PATHを使ってcdなどで簡単に移動できるようになりたい 3 2023/05/13 14:22
- Excel(エクセル) 【VBA】複数ブックから特定のシートを抽出して一つのブックに集約するマクロについて 3 2022/09/04 15:05
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- 洋楽 すき家で流れていたクリスマスソング。2022年冬のすき家で流れていたガールズバンドのクリスマスソング 1 2023/09/09 13:35
- UNIX・Linux 空のディレクトリで dir を行ったとき 4 2023/05/05 17:54
- 計算機科学 デジタル信号処理について詳しい方解説お願いします 1 2024/05/03 15:27
- 数学 難題集から 最大と最小 7 2023/02/22 19:36
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
これなにがちがうんですか??
C言語・C++・C#
-
コマンドプロンプト tree
その他(OS)
-
CPUが16bitでも32bitOSでコンパイルしたコード(例えばintが4バイトと定義されている)
C言語・C++・C#
-
-
4
プログラミングについて。 1つのループで Aという計算と Bという計算をするのと これらを分けて2つ
C言語・C++・C#
-
5
だれがとけるの?
C言語・C++・C#
-
6
右ビットシフト
C言語・C++・C#
-
7
VBAでパワーシェルを実行したいのですが、なかなかうまく出来ず、有識者の知識をお借りさせてください。
その他(プログラミング・Web制作)
-
8
10進数からN進数に変換するプログラミング(C言語)
C言語・C++・C#
-
9
VBSでテキストファイルの2行目から最終行までを別のファイルに出力
その他(プログラミング・Web制作)
-
10
c言語
C言語・C++・C#
-
11
パイソン。If elseの挙動について教えてください。パソコンは、if else で、まずifに当て
C言語・C++・C#
-
12
pythonについて。
その他(プログラミング・Web制作)
-
13
gcc13.2のバグ?
C言語・C++・C#
-
14
プログラミング言語の制作方法について
C言語・C++・C#
-
15
License='MIT' ってなんでmitなんですか??適当なのでもいいですか? パイソン
C言語・C++・C#
-
16
pythonの質問です。
C言語・C++・C#
-
17
C言語 列挙型(enum型)変数について
C言語・C++・C#
-
18
pythonの条件分岐(if)
その他(プログラミング・Web制作)
-
19
プログラムの素朴な質問です 分岐するコードを書く時に、 /** * 関数 */ sub(){ ...
その他(プログラミング・Web制作)
-
20
ホワイトハッカー
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで相対パスの書き方を...
-
月の第一週とは
-
エクセルで毎月第2週日の水曜日...
-
DBを10件毎に表示ページング...
-
毎○曜日って、使いますか?
-
週2回のペースって だいたい何...
-
VBAでExcelのヘッダーに文字列+...
-
よくある 『 第○(1・2・3・4・...
-
SpreadDesignerの列ヘッダ
-
毎週同じ曜日にラブホに行くと...
-
ホームページにブログ記事をサ...
-
VBA。複数のChangeイベントをま...
-
土曜日の26時って何曜日の何時...
-
jcode.plが読み込めない
-
一度会っただけで忘れられない...
-
ApacheのFastCGIが動作しない。
-
apacheでPerl CGIが作動せず、5...
-
アンケートなどの1日1回の投...
-
Excelで第一〇曜日を求める方法...
-
webサーバでクライアントを特定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで相対パスの書き方を...
-
上位階層のディレクトリパスを...
-
ディレクトリパスの取得について
-
Pythonのstatsmodelsでカルマン...
-
「Movable Type 3.2」のブログ...
-
FORMのFILEでフォルダ(ディレ...
-
cocoa で ユーザーディレクトリ...
-
C# FTPサーバ カレントディレ...
-
Perl の外部モジュールの利用方法
-
SSIで呼び出したURLの取得
-
URIとURLの違いは何ですか?
-
useする自作のモジュールについ...
-
シェルスクリプトで以下のこと...
-
ディレクトリの削除について
-
T_T
-
BBSについて
-
フォルダの移動をおこないたい...
-
ソリューションの名前の変更
-
特定のdirで発行したcookieを上...
-
絶対パス・相対パス・ディレク...
おすすめ情報
「tatsumaru77様」回答ありがとうございます。
実はこのディレクトリには仮で「A」~「L」としましたが、実はすべてのディレクトリ名の頭に「B」がついているのです。
それで今回の仮のディレクトリ名とごちゃごちゃになってしまいました。
ですので分かりやすく書くと「B0A」「B0B」「B0C」・・・「B0L」といった感じです。