ファイルのパーミッション設定方法について

このQ&Aのポイント
  • 初心者でもわかるopensuse 11.2のchmodの使い方を解説します。
  • Perlスクリプトを使用してフォルダ内のファイルのパーミッションを設定する方法について詳しく説明します。
  • フォルダ内の特定の拡張子を持つファイルのパーミッションを一括で変更できるコマンドの使い方について解説します。
回答を見る
  • ベストアンサー

opensuse11.2 , chmod お願いします。

# 初心者です。opensuse 11.2 です。よろしく、お願いいたします。 # 以下のような chmod.pl を フォルダ 4c がある フォルダに置きま した。 # そして、ターミナルKonsoleで 、 perl -T chmod.pl としました。 # すると、 # フォルダ 4c の中に フォルダ10個 4c01~4c10 を作るのは、うまくいきました。 for (my $i = 1; $i < 11; $i++){ mkdir ("4c/4c0$i", 777); # 次に、フォルダ 4c の中にある フォルダ aa4 の中にあるファイル # 100個 1001.cgi~1100.cgi を 4c01~4c10 へコピーすることも、できました。 for (my $j = 1001; $j < 1100; $j++){ copy "4c/aa4/$j.cgi", "4c/4c0$i/$j.cgi" or die $!; } # でも、次に、 4c01~4c10 のすべての cgiファイルを # パーミッション 755 にしようとしたところ。 for (my $k = 1; $k < 10; $i++){ chmod(0755,"4c/4c0$i/*.cgi"); } } # だめでした。エラーの表示はでません。 #どうしたら、よいかお教えください。お願いいたします。

  • Perl
  • 回答数1
  • ありがとう数1

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

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

「4c/4c01/*.cgi」などの名前のファイルのパーミッションを変えようとしてたりして. さしあたり glob を使えば何とかなるかも. 別件で気になることがあるんだけど ・mkdir ("4c/4c0$i", 777); でいい? ・最後の for (my $k = 1; $k < 10; $i++) の部分が変 ・for のネスト具合が謎

ttaa100kkaa
質問者

お礼

ありがとうございました。解決しました。

関連するQ&A

  • chmodでのパーミッション

    実行すると、同じディレクトリにあるディレクトリとその中のファイルを同じ階層にディレクトリを新規に作って、その中のファイルを全部コピーするスクリプトを組んでいます。 コピーはうまくいったのですが、パーミッションの設定がうまくいきません。 例えば @chmod("$dir/xxx.cgi",0755)or die("エラー"); と書くと、パーミッションは363になってしまいます。 5ファイルくらいあるのですが、他のパーミッション(例えば666など)も137になってしまいます。 Webを検索してもこういった事例にはおめにかからないのですが、私の使っている2つのサーバーで、どちらも同様の結果でした。 何がいけないのでしょうか? よろしくお願いいたします。 #ついでにmkdirも作成はできるのですが、パーミッションが必ず755になってしまいます。 #作成されたディレクトリやファイルのownerは、1つめのサーバーではnobody、もう一つのサーバーではログインユーザーになります。 #サーバーはどちらもLinuxです。 #PHPのヴァージョンは、1つめが4.3.1、2つめが4.3.4です。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • for文の利用について

    for文を使って、以下のような図形を作成してますが、 どうしてもうまく作れません。 どなたか教えていただけないでしょうか? 現在出来ているソースは次のようです。 まるで異なる図形になってしまいますが。 public class kurikaeshi { public static void main(String[] args) { int i = 0, j = 0, k = 0, l=0; for(i = 0; i < 10; i++) { for(j = 0; j < i + 1; j++) { for(k = 0; k < 2*j; k++) { System.out.print("a"); } for(l = 0; l < (2*i + 1) - 2*k; l++) { System.out.print("*"); } System.out.println(); } } } } + +++ aa+ +++++ aa+++ aaaa+ +++++++ aa+++++ aaaa+++ aaaaaa+ +++++++++ aa+++++++ aaaa+++++ aaaaaa+++ aaaaaaaa+ +++++++++++ aa+++++++++ aaaa+++++++ aaaaaa+++++ aaaaaaaa+++ aaaaaaaaaa+

    • ベストアンサー
    • Java
  • unable to change to sudoers gid: Operation not permitted

    apache権限で動くApacheサーバにて、root権限でadduserなどをしたくて、 /path/to/useradd.plを用意し、ファイルのオーナーはroot、パーミッションを755とします。 /etc/sudoersに apache ALL = (ALL) NOPASSWD:/path/to/useradd.pl を追加します。 で、perl-CGIより my $ret = `sudo ./useradd.pl xxxxxxxx 2>&1`; のように呼び出しているのですが、タイトルの通りのエラーが出てしまいます。 OSはCentOS5で、一時は動作していたのですが、再起動したらエラーが出るようになってしまいました。 useradd.plの中でやっていることは、systemコマンドで useradd username su username -c 'mkdir /foo' su username -c 'chmod /foo' chown -R username.username /foo/bar などをしています。 sudoers gidに変更できない、というエラーは、どのようなケースで起きるのでしょうか。もしヒントでもおわかりになる方がいらっしゃいましたら是非教えてください。 よろしくお願いいたします。

  • C言語についての質問です。

    C言語についての質問です。 このプログラムの前半にある A[N][N]={{1,0,0},{0,1,0},{0,0,1}} b[N]={4,5,3} という行列の成分をキーボードから入力するようにする にはどうすればいいでしょうか。 for や scanf や printf を使って、変えてくれないでしょうか。 #include <stdio.h> #include <math.h> /* gauss33.c */ #define N 3 main(){ double A[N][N]={{1,0,0},{0,1,0},{0,0,1}}; double b[N]={4,5,3}; double Aa[N][N]; double x[N], bb[N], e[N]; int n=N; int i, j, k; double akk, aik, s; /* input original coefficients */ /* save original coefficients */ for(i=0; i<n; i++){ for(j=0; j<n; j++){ Aa[i][j]=A[i][j]; } bb[i]=b[i]; } /* forward operation */ for(k=0; k<n-1; k++){ akk=1/A[k][k]; for (i=k+1; i<n; i++){ aik=-A[i][k]*akk; for (j=k+1; j<n; j++){ A[i][j]+=aik*A[k][j]; } b[i]+=aik*b[k]; } for(j=k+1; j<n; j++){ A[k][j]*=akk; } b[k]*=akk; } /* backward operation */ x[n-1]=b[n-1]/A[n-1][n-1]; for(k=n-2; k>=0; k--){ s=0.0; for (j=k+1; j<n; j++){ s+=A[k][j]*x[j]; } x[k]=b[k]-s; } /* chek */ for(i=0; i<n; i++){ s=0.0; for(j=0; j<n; j++){ s+=Aa[i][j]*x[j];} e[i]=s-bb[i]; printf("\nx(%d)=%f error=%f\n",i, x[i], e[i]); } }

  • C言語のプログラムで質問です。

    C言語のプログラムで質問です。 これは、2元1次連立方程式の解を求めるプログラムです。 このプログラムを (1)3元1次連立方程式の解を求めるプログラムにする (2)係数行列、定数行列(6、7行目)をキーボードからの入力にする。 ようにしたいのですが、どうすればよいでしょうか。 前半の部分を変えれば良いようなのですが分かりません。教えてください。 #include <stdio.h> #include <math.h> /* gauss22.c */ #define N 2 main(){ double A[N][N]={1.,4.,3.,2.}, Aa[N][N]; /*簡単のため係数行列を予め指定*/ double b[N]={4.,5.}, x[N], bb[N], e[N]; /*簡単のため定数ベクトルを予め指定*/ int n=2; int i, j, k; double akk, aik, s; /* save original coefficients */ for (i=0; i<n; i++){ for (j=0; j<n; j++){ Aa[i][j]=A[i][j]; } bb[i]=b[i]; } /* forward operation */ for (k=0; k<n-1; k++){ akk=1/A[k][k]; for (i=k+1; i<n; i++){ aik=-A[i][k]*akk; for (j=k+1; j<n; j++){ A[i][j]+=aik*A[k][j]; } b[i]+=aik*b[k]; } for (j=k+1; j<n; j++){ A[k][j]*=akk; } b[k]*=akk; } /* backward operation */ x[n-1]=b[n-1]/A[n-1][n-1]; for (k=n-2; k>=0; k--){ s=0.0; for (j=k+1; j<n; j++){ s+=A[k][j]*x[j]; } x[k]=b[k]-s; } /* chek */ for (i=0; i<n; i++){ s=0.0; for (j=0; j<n; j++){ s+=Aa[i][j]*x[j];} e[i]=s-bb[i]; printf("x(%d)=%f error=%f?n",i, x[i], e[i]); } }

  • for 文における処理の改善(C言語プログラム)

    はじめまして。panicdjです。 いまCでプログラムを組んでいます。 環境はVC++ver6.0 Win32 Console Applicationです。 以下のプログラムを見てください。 #define X_MAX 10 #define Y_MAX 20 #define Z_MAX 5 int main(int argc , char ** argv) { int i, j, k; int aa[10][20][5]; for (i = 0; i < X_MAX; i ++) { for (j = 0; j < Y_MAX; j ++) { for (k = 0; k < Z_MAX; k ++) { aa[i][j][k] = 10.0; } } return 0; } 過去のスレッドでポインタ型によるアクセスを すれば、処理が高速になるとかかれていました。 自分は,for文による繰り返す処理ではなく, その「ポインタ型によるアクセス」を実装したいのです。 こんな私にアドバイスお願い致します。

  • こんなメールが来たんですが、解読お願いします。

    知らないアドレスからYahoo!メールに来ました。解読お願いします。 o$C$?$h(B?? $B?2$k;~4V$b$_$8$1!<$7$h(B $B:#Ho32FO$1$N$?$a$K@:?@2JDL$C$F%+%&%s%;%j%s%0$_$?$$$N$@$1$d$C$?$j$H$+K\Ev6b$+$1$5$;$k$h$J(B?? $BK\Ev:#$@$1$@$+$i$=$s$J$s$G$$$i$l$s$N$b(B $B$3$l0J9_0l@Z%a!<%k$bJV?.$7$J$$$7EEOC$b$G$J$$$+$i(B $B$b$&IU$-$^$H$o$J$$$G0l@Z$&$A$K4X$o$i$J$$$G$&$A$o$b$&0l@Z9%$-$8$c$J$$$70l@Z4X$o$j$?$/$J$$(B $B$3$l$,K\Ev$K$&$A$+$i$N:G8e$N%a!<%k$H:G8e$NCi9p(B $B$O$C$-$j:#8@$C$?$+$i$M$&$A$N5$;}$A$r(B $B$=$l$G$b$3$N%a!<%k$K4X$7$FJV?.$7$F$-$ ?$j$7$?;~E@$G$&$A$^$B$G0lJ?7/$N$3$H$H$+B>$K$b?'!92fK}$7$F$-$?$3$H$"$k$1$I$J$K$7$G$+$9$+J,$+$s$M$'$+$i(B $B$I$C$A$_$A$b$&Ho32FO$1=P$9=`Hw$o$7$F$k$7$b$&O"Mm$7$J$$$+$i$H$+DLMQ$7$J$$$+$i(B $B$I$C$A$,>!$D$+3Z$7$_$@$M!)(B $B$H$K$+$/$b$&$&$A$K4X$o$i$J$$$G(B $B$"$H(Bmixi$B$N$o>C$5$J$$(B$BA0$K>C$7$?$N$o$b$&O"Mm$7$F$3$J$$$C$F<+J,$+$i8@$C$?$+$i$=$l$J$i$C$F;W$C$?$1$I2?2s$bLsB+GK$C$F$k$+$i:#2s$o>C$7$^$;$s(B $B$"$J$?$,:#8e$&$A$KO"Mm$7$F$/$k$+$7$F$3$J$$$+$H$+?'!9BP1~8+$F$+$i7h$a$k$

  • C言語

    C言語についてです。 例えば関数中で for(i=0;i<10;i++){ for(j=0;j<10;j++){ A[i][j]=・・・; } } という10×10の配列に1つ1つ値が入っているとします。 このfor文の中で入れた値をfor文の外で使うことは出来ないのでしょうか? 例えば、 for(i=0;i<10;i++){ for(j=0;j<10;j++){ A[i][j]=・・・; } } for(k=0;k<10;k++){ for(l=0;l<10;l++){ B[k][l] = A[i][j]/2; } } みたいな形です。 つまり、A[i][j]の初期化を防ぐ方法はあるのでしょうか? 分かりにくくてすいません。

  • いきなりこんなメールが来ました。

    知らないアドレスからYahoo!メールに来ました。文字化けなのは分かってますが、解読お願いします。 $B$&$A$H$*A0$N7hDjE*$J0c$$65$($F$"$2$h$&$+!)(B $B$^$:$&$A$o0&>p$K52$($F$J$$(B $B$b$&9%$-$8$c$J$$(B $BNd$a$?$C$F8@$C$F$k?M$K$7$D$3$/$D$-$^$H$o$J$$(B $B%9%H!<%+!<$7$?$3$H$J$$(B $B$&$A$o$*A0$h$j$+$o$5$C$Q$j$7$F$k$N$H:,@-$=$3$^$GIe$C$F$J$$(B $B<+J,$G$I$s$@$1$&$A$KEEOC$7$F$k$+J,$+$C$F$k$h$M(B $BL@:Y=q<h$j4s$;$k;~$,K\Ev3Z$7$_$@$h(B?? $B$&$A$*A0$,$7$D$3$$$;$$$GK\EvF,$*$+$7$/$J$j$=$&$@$h:#(B $B$3$N2?=54V$^$B$GBQ$($k$N$D$i$+$C$?$7K\Ev:#$^$G$G0lHV$N@:?@E*6lDK$rL#$ &$A$,(B $B$&$A$,$I$s$@$1$D$i$$;W$$$7$F2fK}$7$F$?$+9M$($?J}$,$$$$$h(B $B$I$s$@$1@:?@E*$K6l$7$$;W$$$7$?9M$($?J}$,$$$$$h(B $B9%$-$J?M$K$=$3$^$GDI$$5M$a$?<+J,$,$d$C$F$-$?$3$H$H$+:#$7$F$k$3$H(B $B$"$H$3$N@hHo32FO$1=P$7$?8e?'!9$H$*6b$NOC$7$bMm$s$G$/$k$H;W$&$1$I?F9'9T$7$?$$$s$8$c$J$+$C$?!)<+J,$,$d$C$F$-$?$3$H$G$$$/$iBg?M$K$J$C$F$h$&$,>/$J$+$i$:2HB2$K$o>/$7$G$bLBOG$+$+$k$C$F9M$($F9TF0$7$?J}$,$$$$$h?F9'9T$7$?$$$J$i(B $BJa$^$k$J$s$F$b$C$F$N$[$+$@$+$i$M(B $B$^$!$H$K$+$/$&$A$

    • ベストアンサー
    • HTML
  • (VBA)bat処理の結果がおかしい

    以下の1)から5)までをVBAで行いたいのですが 1)、2)までのコードはネットを参考に作成したのですが  2)の結果が¥tempに書き出されませんでした。   (C:¥に直接書き出される) 原因は何でしょうか ?  (コードの修正をお願いします。) 以下は、行いたい事のイメージ。-------------------------------------------------- 1)指定ディレクトリにディレクトリ(C:\)に保存した   BATファイル(aa.bat)をコピーする 2)指定ディレクトリ内でaa.batを起動する 3)指定ディレクトリーに最初から存在したフォルダーを削除する 4)aa.batによって作成されたフォルダーを最初のフォルダー名に変名する 5)aa.batをコピー先から削除する 例:指定ディレクトリをC:¥temp、aa.batをC:\tempにコピーしたと  C:¥temp¥AA  C:¥temp\AA¥subAA   C:\temp\aa.bat aa.batを\temp内で起動した後で ------>を実施  C:¥AA    ------> 削除  C:¥AA_SUBAA ------> C:\AAに変名  C:\temp\aa.bat -----> 削除 最終的に  C:¥temp\AA --------------------------------------- Sub Test() Dim strPath As String Dim intPathLen As Integer Dim intR As Integer Dim F As Variant Dim obj As WshShell Dim sPath 'Range("A5:F100").Clear ' フォルダーを自由に選べること。 参考:officeTANAKA With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then ' MsgBox .SelectedItems(1) If Len(.SelectedItems(1)) = 3 Then ' c:\の場合とサブフォルダーの場合 mypath = .SelectedItems(1) Else mypath = .SelectedItems(1) & "\" End If End If End With If mypath = Empty Then MsgBox "フォルダー名の指定をキャンセルしました。": Exit Sub MyName = Dir(mypath, vbDirectory) ' 最初のフォルダ名を返します。 ’Range("A2") = mypath 'コピー先フォルダーの指定 'BATファイルのコピー FileCopy "C:\aa.bat", mypath & "aa.bat" 'batファイルの起動 sPath = mypath & "\aa.bat" Set obj = New WshShell Call obj.Run(sPath, WaitOnReturn:=True) End Sub ------------------------------------------------------------------- 以下は、aa.batの内容です。 for /d %%i in (*) do ( pushd . cd %%i for /d %%j in (*) do ren "%%j" "%%i_%%j" for /d %%k in (*) do ren "%%k" "../%%k" popd rd "%%i" ) -------------------------------------------

専門家に質問してみよう