WordPressのインストールでファイル権限を繰り返し変更しようとしています。これは、public_htmlドキュメントルートフォルダ(特定のフォルダを除く)の下のすべてのエントリに影響します。
私はextglobを次のように設定しました。shopt -s extglob
次のコマンドを実行すると、除外するフォルダを除外できません。
ls -R -alh ./public_html/!(*uploads*) | grep uploads
上記はアップロードフォルダに多数のファイルを一覧表示します。ファイルをリストしてはいけません。
もちろん、上記のコマンドは単なるテストです。chmod
実際のスクリプトで使用します。
たとえば、次のようにさまざまな組み合わせを試しましたが、成功しませんでした。
ls -R -alh ./public_html/!(wp-content/uploads*)
ls: ./public_html/!(wp-content/uploads*) にアクセスできません。そのファイルやディレクトリはありません。
シェルコマンドで除外を使用しようとしたのは今回が初めてなので、単純な間違いを犯している可能性もあります。
何が間違っているのか、どんなアイデアがありますか?
注:質問の目的はextglobをよりよく理解することであり、代替案を見つけることではありません。代わりに書くことができますが、以前はextglobを使ったことがないので、構文を理解するのが難しいです。
ベストアンサー1
まず、extglobはls
コマンドラインで表示される内容を制御します。もちろんいいえls
コマンドラインに表示される内容で実行される操作を制御します。これはナビゲーション-R
オプションを通知するので重要です。ls
ls
再帰的コマンドラインに表示されるすべてのディレクトリ。したがって、*uploads*
コマンドラインにディレクトリが明示的に提供されていない場合でも、親ディレクトリに移動するとls
そのディレクトリを見つけることができます。
第二に、ご存知のようにlsを解析しないでください。の出力はls
パイプやスクリプトでは機能しません。このように使用しようとすると、最終的に不幸につながります。
第三に、必要なファイルを取得するには、次のようにします。
find ./public_html ! -path '*uploads*'
説明する:
findにディレクトリから検索を
./public_html
開始するように指示します。./public_html
このオプション自体は、
-path '*uploads*'
パターンを含むすべてのパスと一致します*uploads*
。 (findのoptionsに似ています-path
が、ディレクトリ名が含まれています。)しかし、上記は否定を意味します。したがって、このオプションは一致するパスを除外します。-name
path
!
! -path '*uploads*'
*uploads*
ls
機能を引き続き使用しながらスタイル付き出力を取得するには、次の点をfind
考慮してください。
find ./public_html ! -path '*uploads*' -exec ls -dalh {} +