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


22

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

私はこれがあることを知って.*いるではない、それはまた、現在見付けるので、良いアイデア.と親..ディレクトリを(私が知っているrm上で動作しなくなります.し、..他のコマンドを含むchownchmod、喜んで有効になります)

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

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

回答:


20

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

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

  • @()extglob、我々はその中に一つだけのパターンを持っているとして、それがあることを選ぶだろう、内部のパターンのいずれかと一致しますパターン

  • !(.|)別のextglobパターン(ネスト)で、noまたはoneのファイルに一致します.。私たちがマッチしてきたように.、既に開始時に、この全体のパターンが始まるすべてのファイルにマッチします.除く...

extglobbashUbuntuのデフォルトでは、インタラクティブセッションで有効になっています。そうでない場合は、まず有効にします。

shopt -s extglob

例:

$ echo .@(!(.|))
.bar .foo .spam

これは明らかに学ぶ必要がある素晴らしいことです!教えてくれてありがとう
ザンナ

@Zanna Glad私は助けることができました:)
heemayl

2
の目的は何@()ですか?Simple .!(.|)は同じように機能するようです。
カイルストランド

1
これは古いことは知っていますが、@ KyleStrandと同じ質問があります。私のテストで!(.|)は、同じように動作します。@()この文脈の背後に何か目的はありますか?
水田ランダウ

強打文字は否定ですか?言及されておらず、説明を読むと、パターンはドットとダブルドットに一致するという印象を受けますが、開始ドットに一致するファイルを明確に説明します。
ユーザー不明

20
 GLOBIGNORE=".:.."

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

あなたもできる

shopt -s dotglob

ジル:)


9

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

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

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


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

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

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


4
-maxdepth 1質問と他の回答の動作により密接に一致させるために、ここに追加することをお勧めします。
ゲリット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.