ディレクトリ内のすべての隠しファイルに対して何らかのアクション(たとえばchown
)を実行したい。
この.*
がnotであることは、現在の.
および親..
ディレクトリ(rm
.
および..
での操作は失敗しますが、chown
およびchmod
を含む他のコマンドは有効になります)
しかし、すべての隠しファイルには異なる名前が付いています!
.
と..
を除外しながら、すべての隠しファイルをグロブするにはどうすればよいですか?
次のextglob
パターンを使用できます。
.@(!(.|))
.
は最初にリテラル.
と一致します
@()
はextglob
パターンで、内部に1つのパターンしかないため、内部のパターンの1つと一致します。
!(.|)
は別のextglob
パターン(ネスト)であり、.
がないか1つのファイルに一致します。開始時にすでに.
と一致しているため、このパターン全体は、.
と.
を除く..
で始まるすべてのファイルと一致します。
extglob
は、Ubuntuではデフォルトでbash
の対話型セッションで有効になっています。そうでない場合は、まず有効にします。
shopt -s extglob
例:
$ echo .@(!(.|))
.bar .foo .spam
GLOBIGNORE=".:.."
を非表示にします。および..ディレクトリ。これにより、dotglob
オプションも設定されます。*
は、隠しファイルと非隠しファイルの両方に一致します。
あなたもできる
shopt -s dotglob
ここでfind
コマンドを使用できます。たとえば、次のようなもの
find -type f -name ".*" -exec chmod 775 {} \;
これにより、隠しファイルが検出され、アクセス許可が変更されます
編集して、@ gerritによるコメントを含めます。
find -type f -maxdepth 1 -name ".*" -exec chmod 775 {} \;
これにより、再帰的に検索する代わりに、現在のディレクトリの最上部の検索が制限されます。