web-dev-qa-db-ja.com

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

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

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

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

また、ファイルのリストをchownし、他のいくつかを除外する方法があります、例えば:

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

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

33

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

chmod 644 one two three

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

chmod -R 644 !(cache)

十分でしょう.

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

shopt -s extglob

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

45
Dennis

./list-of-filenames-to-change.txtにファイル名のリストを作成して実行します。

chmod g+w `cat list-of-filenames-to-change.txt`

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

chmod 644 one two three

または、最初のオプションを使用して町に行きますが、ファイルの各行を操作します(この例では、 "/"(以前の空白文字を含む)を "./"に置き換えます):

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

win! の正規表現

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

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

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

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

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

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

あなたの旅行中にあなたに興味があるかもしれない私からの他のリンクとコンテンツ:
さまざまな情報-コーンボーンおよび友人からのメモ。-デイブホーナーのウェブサイト

乾杯。
-デイブ

2
Dave Horner

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

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

chmod +x `ls *.run`
2
gat1