ファイルの特定のリストをchmod / chownするにはどうすればよいですか?


31

フォルダーのアクセス許可を設定するために.shスクリプトを作成したいのですが、次のようなものを実行できるかどうか疑問に思いました。

chown -644 ./one;/two;/three

chownを複数回呼び出すのではなく、フォルダーのリストをchownします。

また、次のように、ファイルのリストを作成し、他のいくつかを除外する方法がありますか?

chown -R -664 ./*;!./cache

私の擬似コマンドラインが意味を成すことを願っています。

回答:


43

ほとんどすべてのUnixツールは、ファイルのリストを非オプション引数として受け入れます。通常どおり、異なる引数はスペースで区切る必要があります。

chown 644 one two three

2番目の例では、Bashを使用している場合、単純な

chown -R 644 !(cache)

十分になります。

このアプローチでは、拡張パターンマッチングが必要です。無効になっている場合は、次の方法で有効にできます

shopt -s extglob

参照:Bashリファレンスマニュアル#パターンマッチング


4

mod-these.txtでファイル名のリストを作成し、実行します:

chmod g+w `cat mod-these.txt`

または、ここで他の人が説明した方法を使用します。

chown 644 one two three

または、最初のオプションで町に行きますが、ファイル内の各行を操作します(この例では、「/」(前の空白)を「./」に置き換えます):

chmod g+w `sed 's/ \// .\//' update-writable.txt` 

2

勝利のための正規表現

findを使用することは、特定のシェルまたは既に使用しているアプリ内に既に存在する可能性のある正規表現を使用する以外で考えることができる最良の方法です。最初に、私は試しました:

touch one&touch two &touch three&find -name "one|two|three" -exec chown -644 {} \;

しかし、この場合はパイプが機能しないことがわかります。chmod、chown、chgrp、etの学習など、学ぶべきもう1つの悲しいことです。等 マルチファイル/正規表現の選択/除外自体をサポートしていません...
私が見つけた解決策:https :
//stackoverflow.com/questions/19111067/regex-match-either-string-in-linux-find-command

find \( -name one -o -name two -o -name three \) -exec chown -644 {} \;

そのため、勝つための正規表現はそれほど多くありませんが、少なくとも1つのライナーでプログラムの引数にファイルのリストを挿入する方法があります。

()メタ文字をエスケープする必要があることに注意してください。各追加名に-oパラメーターを追加します...

旅行中に興味があるかもしれない他のリンクやコンテンツ:
さまざまな情報-korn bourneや友人からのメモ。-Dave Hornerのウェブサイト

乾杯。
-デイブ


KISSが勝ち、シンプルで愚かなことをしてください!まだクリーンで簡単なものを複雑にする必要はありません。
アルMothafar

2

変更するファイルが1つのディレクトリにある場合は、必要なパターンでファイルをlsできます。

たとえば、pwdにあるすべてのダウンロードされた.runファイルを実行可能ファイルに変更する必要があります。

chmod +x `ls *.run`
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.