web-dev-qa-db-ja.com

すべての隠しファイルをグロブするにはどうすればよいですか?

ディレクトリ内のすべての隠しファイルに対して何らかのアクション(たとえばchown)を実行したい。

この.*notであることは、現在の.および親..ディレクトリ(rm.および..での操作は失敗しますが、chownおよびchmodを含む他のコマンドは有効になります)

しかし、すべての隠しファイルには異なる名前が付いています!

...を除外しながら、すべての隠しファイルをグロブするにはどうすればよいですか?

22
Zanna

次のextglobパターンを使用できます。

.@(!(.|))
  • .は最初にリテラル.と一致します

  • @()extglobパターンで、内部に1つのパターンしかないため、内部のパターンの1つと一致します。

  • !(.|)は別のextglobパターン(ネスト)であり、.がないか1つのファイルに一致します。開始時にすでに.と一致しているため、このパターン全体は、..を除く..で始まるすべてのファイルと一致します。

extglobは、Ubuntuではデフォルトでbashの対話型セッションで有効になっています。そうでない場合は、まず有効にします。

shopt -s extglob

例:

$ echo .@(!(.|))
.bar .foo .spam
20
heemayl
 GLOBIGNORE=".:.."

を非表示にします。および..ディレクトリ。これにより、dotglobオプションも設定されます。*は、隠しファイルと非隠しファイルの両方に一致します。

あなたもできる

shopt -s dotglob

Gilles:)

20
Rinzwind

ここでfindコマンドを使用できます。たとえば、次のようなもの

find -type f -name ".*" -exec chmod 775 {} \;

これにより、隠しファイルが検出され、アクセス許可が変更されます


編集して、@ gerritによるコメントを含めます。

find -type f -maxdepth 1 -name ".*" -exec chmod 775 {} \;

これにより、再帰的に検索する代わりに、現在のディレクトリの最上部の検索が制限されます。

9
Wayne_Yux