2009-10-19 10 views
10

ワイルドカード*(それ自体)は、「現在のフォルダ内のすべての非隠しファイル」を意味するように展開され、隠しファイルはピリオドで区切られます。Bash globbing - いくつかの特定のケースで自動拡張?

私は有用であるが、私は適切に行う方法がわからないと思うだろう2つの使用例があります。

  1. はどのようにするために...「現在のフォルダ内のすべてのファイルをグロブすることができますが、隠しファイルは含みますが、.または.. "は含まれていません。

  2. どのようにglobすることができますか?現在のフォルダ内のすべての隠しファイル(隠しファイルのみ)ですが、.または..は含まれていませんか?

答えて

15

paviums answerに拡大し、あなたの質問の後半部分に答えるために、...除くすべてのファイルは次のように指定することができます。

{.[!.]*,*} 

あなたの正確なユースケースに応じて、dotglobを設定した方が良いかもしれませんシェルオプション、そのbashがデフォルトで*の展開でドットファイルが含まれて:

$ shopt -s dotglob 
$ echo * 
.tst 
+2

'{..?*、。[^。] *、[^。] *}'は 'dotglob'の設定に関係なく動作し、ファイル名の欠落を避けるために2つのドットで始まります。 – ephemient

+1

@ephemient:これは2つのドットで始まるファイル名がないとき、私に偽のマッチ '..?*'を与えます。 –

3

Bash Cookbookは、第2の要件の解決策を示しています。 「ドットファイル」を指定するが、もちろん...

を回避する方法として、

.[!.]* 

ls-Aオプションを持っているが、それはグロブていません。

+2

'タッチ..blah。エコー{。、} [!。] * | grep blah'が失敗します。 – ephemient

1

あなたの最初のケースを満たすために:

echo {.,}[^.]* 

または

echo {.,}[!.]* 

編集

この1つはすべてを取得するようだが、"すべてのファイル" とは、ephemientさん

echo {.*,}[^.]* 
+2

'touch ..blah;エコー{。、} [^。] * | grep blah'が失敗します。 – ephemient

0

よりも短く、 「すべての隠しファイル」とはファイルのみを意味しますか、または両方のファイルを意味しますか? ilesとディレクトリ? Globbingは、ファイルやディレクトリに属しているにもかかわらず、名前に作用します。他の人は、非表示の名前と非表示の名前を区別するためにグロブリングを使用すると良い答えが得られますが、タイプを区別できるより簡単な方法としてfindコマンドを使用します。

は「隠しファイルを含むが、それを含むかどうか、現在のフォルダ内のすべてのファイルを..」検索するには:

find . -type f 

は隠しファイルを含め、現在のフォルダに「すべてのファイルとディレクトリを見つけるには、含まれていないまたは..":

find . ! -name . 

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

find . -name '.*' -type f 

見つけるために、」すべての隠しファイルとディレクトリ(隠しファイルとディレクトリのみ)現在のフォルダに、は含まないが。または.. ":

あなたは、現在のディレクトリにそれを制限したい場合に使用できるように、デフォルトで検索が、あまりにも、サブディレクトリを再帰的になります。なお
find . -name '.*' ! -name . 

find . -maxdepth 1 -type f 
1

をSTHを組み合わせると、 paviumが、これは古いであっても、そう

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

# all files but avoiding . and .. 
{.[!.]*,*} 
0

に答える - shoptを使用せずに、これは完全に回答されているようには見えない。しかし、これまでのところ答えとして与えられたものに拡大し、これらの作業を私のために:。

1:

{*,.[!.]*,..?*}

2:

{.[!.]*,..?*}

関連する問題