皆さん、お手数ですが教えて下さい。
今Linux上で動作させるC言語のプログラミング作業を行っているのですが、その過程において以下のコマンドラインから”月”の数値を取り出したいと思っています。
(sprintfで編集したコマンドをsystemコマンドで。)
> ls -l test_11.c
-rw-rw-r-- 1 user1 group 5431 9月 25 18:02 test_11.c
以上の表示結果から、lsコマンドとawkコマンドを組み合わせて、月の数値を取り出したいのですが、
この例で言うと、月の部分には”9月”と全角の「月」という文字が付いてきます。
取り出したいのは「9」の値だけなのです。
上手くこの月の数値だけを取り出すオプションとか無いでしょうか?
もちろん、複数のコマンドをパイプで繋げるのは一向に構いません。
よろしくお願いいたします。
No.5ベストアンサー
- 回答日時:
「C言語からlsコマンドを呼び出しても良い」という条件で開発するのなら、「C言語からfindコマンドを呼び出しても良い」筈ですよね。
だとしたら、C言語プログラムではreaddirもstatも行う必要はありません。
対象となりファイルリストはfindが作ってくれるので
popen()
して
char filename[MAXPATHLEN+1];
while(gets(filename)) {
do_something(filename);
}
というシンプルなプログラムで済みます。
No.4
- 回答日時:
「半年以上古いファイルを消す」だったら、最初からそう書いてください。
「月の識別」と「半年以上古いか判断」では全然違います。
非常に時間を無駄にしました。
わざわざCでプログラムを作らなくても、
find ディレクトリリスト -mtime +183 -exec rm {} \;
など、既存コマンドで済みます。
この回答への補足
>「半年以上古いファイルを消す」だったら、最初からそう書いてください。
言葉が足りず、失礼しました。
但し、これはコマンドラインで実行するのではなく、仕事上C言語で作成する必要があったのです。
ですから、無駄ではないはずです。
No.3
- 回答日時:
まじめにreaddirとstatを組み合わせても出来ます。
が、プログラムの実行効率やなんかより、とにかく急いで作ることが優先ならlsをscanfで受ければいいと思いますが。
ところで、本当に月だけで良いんですか?たとえば5月といえば、今年の5月も10年前の5月も区別しなくて良いんでしょうか?
ただ、日本語ロケールでのlsの出力は処理が面倒くさいので、こんな感じのプログラムになるかなぁ。
自分で作って自分が使うだけの使い捨てプログラムならこんなのでも良いと思いますが、お金を取って作る受注ソフトでこんな手抜きコーディングをしてはまずいです。バッファオーバーラン対策もろくにしてないし。
FILE *fp;
char month[なんとか];
fp=popen("env LANG=C ls -l ファイル名 ","r");
while(fgets(buf, SIZE, fp)!=NULL) {
if(scanf("%*s %*s %*s %*s %*s %3s ", month)!=1) ERROR処理;
if(strcmp(month, "May")==0){・・・
この回答への補足
ご回答ありがとうございます。
早速TRYしてみます。
>たとえば5月といえば、今年の5月も10年前の5月も区別しなくて良いんでしょうか?
半年のスパンで古いファイルを削除している処理を作りたかったのです。
何が何でも”直ぐに作る”というつもりではないです。
お察しの通り仕事で使うつもりなので。
「readdirとstat」と「lsをscanf」の両方を試してみます。
ありがとうございます。
No.2
- 回答日時:
statはコマンドではありません。
c言語の関数でファイル情報(日付等)を得ることができます。
http://www.linux.or.jp/JM/html/LDP_man-pages/man …
これと、指定ディレクトリの一覧を得るreaddir関数を組み合わせればできると思います。
http://www.linux.or.jp/JM/html/LDP_man-pages/man …
readdirの使用例は、こちらを。
http://boolabel.exblog.jp/6076113/
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイルを使ってテキス...
-
ftpコマンドを実行すると「425 ...
-
バッチ終了時にDOS窓を閉じるコ...
-
コマンドプロンプトをクリック...
-
VS2019のコンソールC++からGn...
-
findstrでヒットした1行前の文...
-
AccessVBAで実行時間を指定する...
-
バッチファイル 文字列にスペ...
-
シェルの「:コマンドが見つか...
-
フォルダ、ファイル操作に最適...
-
コマンドプロンプトで、特定の...
-
コマンドプロンプトとCygwinの違い
-
ショートカットをデスクトップ...
-
FTPサーバ(ACOS)にあるファイル...
-
コンパイル~リンクを行いたい...
-
clコマンドで実行ファイルの出...
-
コマンドプロンプトでファイル...
-
コマンドプロンプト
-
DOSコマンドで指定日数よりも過...
-
コマンドプロンプト
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチ終了時にDOS窓を閉じるコ...
-
バッチファイル 文字列にスペ...
-
コマンドプロンプトをクリック...
-
ftpコマンドを実行すると「425 ...
-
make test って何をするための...
-
シェルの「:コマンドが見つか...
-
findstrでヒットした1行前の文...
-
バッチファイルを使ってテキス...
-
コマンドプロンプトで、特定の...
-
ショートカットをデスクトップ...
-
2つ目の「pause」は無効?
-
コマンドプロンプトを最小化し...
-
SSH接続でwindowsサーバのコマ...
-
コマンドプロンプトでファイル...
-
コンピュータ名をファイル名に...
-
AccessVBAで実行時間を指定する...
-
コマンドプロンプトのバッチで...
-
シェルからpsqlコマンドでトラ...
-
xCopyコマンドでネットワークご...
-
コマンドプロンプトのFTPコマン...
おすすめ情報