• ベストアンサー

chmod find パイプ 一緒にやりたいとき

こんにちは、はじめまして。下記のようにすると、正常に実行されるのですが、 chmod 766 `find ./* -type f -print` \; || ll ./* 下記のような、エラーメッセージでます。なぜなぜ?? chmod: cannot access `;': そのようなファイルやディレクトリはありません (やっていること: 自分の(カレント)ディレクトリの下のファイル(通常ファイル) 全部自分に実行権つけて、その結果を "|(パイプ)" で渡して、ls -l で全部表示 ) はじめての質問ですので、よろしくお願いねー??

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

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.2

chmod 766 `find ./* -type f -print` || ll ./* で問題ないと思いますが。

jikenjp
質問者

お礼

どうもありがとう御座います。 実は、この質問させていただいた前、一時間程、いろいろ試してみたのです。 標準出力にでる "コマンド" を "|" で渡すのは、自然に理解し易いですが、 (cat a.txt | grep abc とか) "chmod" のように、??? の場合、私、根本的な勘違いしているように、感じたり、他にも問題あったのです。(封鎖するまで、もう少し時間下さいまし。アリガトウポイント20点入れさせて戴きます。(まだ、一度もやったことないので、簡単にできるのでしたら??))

その他の回答 (2)

回答No.3

> chmod: cannot access `;': そのようなファイルやディレクトリはありません と出るのは、-print` \; の部分の \; が余計だからです。 それに || はパイプではありません。OR です。  A || B と書くと A がエラーになったときだけ B も実行します。お尋ねの場合だと、chmod がエラーになったとき、ll も実行されます。  そもそも chmod は標準出力に何も出力しないので、パイプで次のコマンドに渡すこと自体無意味です。 chmod 766 `find ./* -type f -print` && ll ./* がご希望のものでないかと推測します。

jikenjp
質問者

お礼

>oldroot2005 樣 ありがとうございます。完璧です。(自分が、情なくなりました。尊敬いたします。)

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

chmod の引数に最後の \; も入ります.

関連するQ&A

  • unixのfindコマンド

    unixのfindコマンドで、ある複数のディレクトリから指定のファイル名だけを 検索し、その結果をgrepしたいのですが、 例えば 01_dir 02_dir : 11_di : 21_dir : と言うディレクトリがあります。 そこから、「0」で始まっているディレクトリの中なら拡張子が*.txtを 検索し、その検索したファイルに対して、grepを実行したいのですが、 上手くいきません。 もちろん、各ディレクトリには、「.txt」以外のファイルもありますし、 ファイル名にも条件を付与したいです。 以下の様に、 find . -name "0*_dir" -type d -print | xargs ls -l *.txt | grep "検索文字" find . -name "0*_dir" -type d -print | xargs ls *.txt | grep "検索文字" find . -name "0*_dir" -type d -print | xargs -i ls -l '{} /*.txt' | grep "検索文字" find . -name "0*_dir" -type d -print | xargs -i ls {} "検索文字" とやってみたのですがだめでした。 find ./ -type d \( -name '1_*dir' -o -name '2*_dir' -o -name '3*_dir' \) -prune -o -type f -print と「-prune」で除外するディレクトリを指定すればできなくはないですが、 すべてのディレクトリ書くのはいい方法ではないです。 よい方法をお願いします。 OSは、Solaris 11.3です。

  • シェル変数とパイプ

    シェルの変数にパイプを入れた文字列(コマンド)を格納し、それを実行したいのですが、「|」がただの文字として扱われているようでうまく実行できません。 どのように記述すれば、パイプとして認識してくれるのでしょうか? 次のようなことをやりたいのですが、このようにエラーになってしまいます。 # setenv cmd "ls | grep test" # $cmd ls: |: そのようなファイルやディレクトリはありません ls: grep: そのようなファイルやディレクトリはありません ls: test: そのようなファイルやディレクトリはありません

  • 検索して出た結果ファイル一覧の権限を一括変更

    1.ファイルを検索します。(カレントディレクトリに、BBB.sh とCCC.shを保存しております。) 2.検索されたファイルに対して一括でchmodを行いたいのです。 このBBB.shと、CCC.shの権限を666に コマンドだけで実行できないでしょうか? ・考えてみたコマンド ls -l | grep -e [BC] | chmod 655 →エラーになります。 多分、chmod 655の後ろに、ファイルが来ないためエラーになっていると思うのです。 ご教授お願いします。

  • find関数が1階層(カレントディレクトリ)にしか利きません。

    find関数が1階層(カレントディレクトリ)にしか利きません。 Active Perl+MS-DOS(WindowsXP)の環境です。 深い階層を持つディレクトリAで  find(\&dirfiletotal,'.'); を実行し、特定のファイル名を検出しています。 なぜかカレントディレクトリ(A)にあるファイルに対してしか動作しません。(結果は正常です。) find関数は再帰的、つまり下の階層も含めてファイル検出するのだと思っていましたが、間違いでしょうか? もし間違いであれば、どのように書き変えればいいか、ヒントをいただけると大変助かります。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • Perl
  • findの結果をlsで詳細表示

    はじめまして。 Linux初心者です。 カレントディレクトリ以下のディレクトリやファイルの一覧を詳細表示するには「find ./ | xargs ls -lF」などとすると思いますが xargsを使用せずに「find ./ | ls -lF」とすると、なぜNGなのでしょうか。「xargs」の意味を調べると、 (1) 標準入力から空白か改行で区切られた文字列群を読み込む。 (2) xargsの引数のコマンドの後ろに、標準入力から受け取った文字列群を付け足して、そのコマンドを実行する。 とありました。上記の説明で「xargs」を付けることによる効果はわかるのですが、ls以外のコマンドを使用する際にもfindと組み合わせる際には、 すべてのコマンドで「xargs」を使用しなければいけないのでしょうか。 lsの結果をmoreする際などには、「ls | more」で良いと思うのですが、 「ls | xargs more」としない理由がわかりません。 どなたかわかりやすく教えて頂ければ幸いです。 よろしくお願いします。

  • cat `find ./` > for_print.txt にファイル名を入れたい!

    カレントディレクトリ以下のファイルを連結したいのですが、 cat `find ./` > for_print.txt に「ファイル名」と、 あと、「区切り」がわかるように ******************************** を入れたいのですが、 どうしたら良いでしょうか?

  • 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
  • パイプの使いかたについて

    linux初心者です。 パイプの使いかたについて教えて下さい。 パイプを使うことでパイプ前の結果をパイプ後に引きわたし、パイプ後にあるコマンドを実行できる、というようなことはネットで調べました。 ls -l | lessのような。。(ls結果をlessで表示する。) ここで質問なのですが、 grep photo | illust sample.txt としたとき、sample.txtのなかからphotoまたはillustに、マッチする行を抽出するという意味でよいのでしょうか? 自分で検証した限りではそのようにみえました。 ただ、そうだとしたとき、パイプの意味がよくわからなくなってしまいます。 パイプ前でコマンドを実行、その結果を引数にしてパイプ後でコマンドを実行するというように考えないほうがよいのでしょうか? すみませんが、使用方法について教えてください。

  • find 指定ディレクトリ以下のファイル数をディレクトリ毎に表示させたい

    ■前提例 ./public_html/rails/modules/abcde/cache/hoge/file1 ./public_html/rails/modules/abcde/cache/file2 ./public_html/ruby/modules/wiki/private/cache/file3 ./net/cache/file4 ./n/abcde/cache/file5  : 以下略 ■期待しているのは、下記二つのディレクトリを検出し、かつそのディレクトリ以下のファイル数を、ディレクトリ毎に表示させたいのですが、 2./public_html/rails/modules/abcde/cache/ 1./n/abcde/cache/  : もしくは、 2./public_html/rails/modules/abcde/cache/hoge/file1 2./public_html/rails/modules/abcde/cache/file2 1./n/abcde/cache/file5  : ■実際に下記コマンドを実行すると、 find . -type f -regex '.*/abcde/cache/.*' -print | wc -l 4503 という数値(恐らくファイル数?)が返ってくるのみです。 ググッてみて、 find . -type f -regex '.*/abcde/cache*/.*' | xargs wc -l find . -type f -regex '.*/abcde/cache/.*' -print | xargs wc -l find . -type f -regex '.*/abcde/cache/.*' -exec wc -l \{\} \; とか色々試してみたのですが、 恐らく行数?が表示されるようで、自分が期待した結果を得ることが できません。 条件で検出したディレクトリ以下のファイル数を、ディレクトリ毎に表示させるには、 どうしたらよいのでしょうか。

  • chmod ファイル属性について教えてください

    あるディレクトリーで ls -al を行ったところ -rw-r--r--+ 1 root root 34759 3月 7 06:17 2012 httpd.conf と言った表示見つけました。 上記の場合だと、chmod 644 だとは思うのですが、最後の+は、何を意味しているのでしょうか? 気になって他のディレクトリーも見てみると -rw-r--r--@ 1 root root 34759 3月 7 06:17 2012 **** みたいな、@という表記もありました。 ファイル属性の何かだとは思うのですが、分かる方が居られましたらご教授頂けないでしょうか? よろしくお願いいたします