10

ワイルドカード*(それ自体) は、「現在のフォルダー内の非表示でないすべてのファイル」を意味するように展開され、非表示のファイルはピリオドで始まるファイルであることを理解しています。

便利だと思うユースケースが 2 つありますが、適切に行う方法がわかりません。

  1. どうすればグロブできますか...「現在のフォルダー内のすべてのファイル。隠しファイルを含みますが、.またはを含みません..」?

  2. どうすればglobできますか...「現在のフォルダー内のすべての隠しファイル(および隠しファイルのみ)。ただし、またはを含ま.ない..」?

4

6 に答える 6

16

paviums answerを拡張して質問の 2 番目の部分に答えるには、.およびを除くすべてのファイルを次の..ように指定できます。

{.[!.]*,*}

正確な使用例によっては、デフォルトdotglobで bash の展開にドットファイルが含まれるように、シェル オプションを設定する方がよい場合があります。*

$ shopt -s dotglob
$ echo *
.tst
于 2009-10-19T01:22:08.727 に答える
3

Bash Cookbookは、2 番目の要件に対する解決策を提案しています。

.[!.]*

「ドットファイル」を指定する方法として、しかし回避.し、..

もちろん、オプションlsがあり-Aますが、それはグロビングではありません。

于 2009-10-19T00:51:53.770 に答える
2

sth と pavium の回答を組み合わせる

# dot files but avoiding . and ..
.[!.]*

# all files but avoiding . and .. 
{.[!.]*,*}
于 2012-04-26T02:52:23.880 に答える
0

「すべてのファイル」と「すべての隠しファイル」とは、ファイルのみを意味しますか、それともファイルとディレクトリの両方を意味しますか?Globbingは、ファイルまたはディレクトリに属しているかどうかに関係なく、名前を操作します。他の人々は、グロブを使用して非表示の名前と非表示の名前を見つけるための良い答えを示していますがfind、タイプを区別できるより簡単な代替手段としてコマンドを使用することをお勧めします。

「隠しファイルを含むが、。または..を含まない、現在のフォルダ内のすべてのファイル」を検索するには:

find . -type f

「隠しファイルを含むが、。または..を含まない、現在のフォルダ内のすべてのファイルとディレクトリ」を検索するには:

find . ! -name .

「現在のフォルダ内のすべての隠しファイル(および隠しファイルのみ)を検索しますが、。または..は含まれません」:

find . -name '.*' -type f

「現在のフォルダ内のすべての隠しファイルとディレクトリ(および隠しファイルとディレクトリのみ)を検索しますが、。または..は含まれません」:

find . -name '.*' ! -name .

デフォルトでは、findはサブディレクトリでも繰り返されるため、現在のディレクトリのみに制限する場合は、次を使用できます。

find . -maxdepth 1 -type f
于 2012-02-26T20:54:45.860 に答える