2012-09-28 8 views
11

Possible Duplicate:
How can I use inverse or negative wildcards when pattern matching in a unix/linux shell?一覧私は<code>ls</code>ため<code>man</code>ページを読んだ

セレクタに一致しないすべてのファイル(使用してLS)、およびIは、ファイルセレクタに一致ないを行うことすべてを一覧表示するためのオプションを見つけることができません。あなたはこの操作を実行する方法を知っていますか?例えば

: は私のディレクトリはこれです言​​うことができます:

> ls 
a.txt b.mkv c.txt d.mp3 e.flv 

今、私は、次の

> ls -[SOME_OPTION] *.txt 
b.mkv d.mp3 e.flv 

をする何かをしたいと思い、このようなオプションがありますか?

もし出力しない場合は、lsの出力を、私が望むものだけを表示する別の機能(おそらくsed)にパイプする方法がありますか?

私はこれを行うために正確にどのように知りませんが、私はそれはようなものになるだろう想像している:私は本当にsedawk、およびgrepを使用する方法を学ぶ必要がありますが、私は続ける

> ls | sed [SOMETHING] 

正規表現を書く方法を理解していない。私は正規表現の概念をはっきりと理解していますが、異なる構文を使用する正規表現の間では混乱します。

ご協力いただければ幸いです。

EDIT:

私は私は、Mac OS Xを実行していることを言及するのを忘れてしまったので、機能は私の混乱の一部、したがって(UNIX/Linuxのシェルの他の回答で述べたものとは多少異なる場合がありますsed,awk、およびgrep)。

答えて

16

多分、このコマンドを使用し

find ./ -maxdepth 1 ! -path "*txt" 
+0

' path'パラメータとして多くの異なるセレクタでうまく動作します私が見つけたのは、 '' find。-maxdepth 1!-path "* txt" 'も実行できるということでした。 リストをフィルタリングする正規表現があれば、どうすればいいですか? –

+0

ifたとえば、 "abc"のような3つのファイルがあり、ls | grep -v "[a | b]"を使用すると、cと表示され、3つのファイルにaaaaa、使用する "ls | grep -v "a +"を指定すると、 "a"だけが表示されます。 –

+0

./ findコマンドはすでに現在のディレクトリツリーから検索を開始しているため、引数はオプションです – kante

9
ls|grep -v ".txt" 

これは役に立ちますか?

+0

これは私があなたに与えたケースでは機能しますが、実際にはセレクタで動作するものを探しています。例えば、 'x'文字の後ろに' in'という単語があるものを表示しない場合、 '* x * in * 'セレクタを使う必要があります。私が思うあなたの例を使って、これは可能ではありません。 –

+0

@KaushikShankar私はそれが動作すると思います。試してみる。 –

3

一つの方法findを使用して:

find . -maxdepth 1 -type f -not -name "*.txt" -printf "%f\n" 
+0

ありがとうございました! 残念ながら、私はMac OS Xで動作することに問題があると思います。 私が得るエラーは以下の通りです: コマンド: '> find。 -maxdepth 1 -type f -not -name "* .txt" -printf "%f \ n" ' エラー: ' 39m \ n "find:-printf:不明なプライマリまたはオペレータ' –

+0

@KaushikShankar:はい'ls'が動作する方法に似たファイルのリストを提供するためにあなたの出力を修正します。 – Steve

3

LSを助けるだけでそれがで提示されたものを引数リストされます。 *.txta.txt c.txtに拡張されてからlsに表示される場合は、echo *.txtを試してください。あなたはと尋ねる何をすべきか

により、たとえば、その入力からパターンを削除することができをセッド:

ls | sed '/\.txt$/d' 

.txtで終わるすべての行を削除することになります。それは次のようになりbashのでbashの、あなたはシェルが反転展開を行うことができますのzshで

、:

ls !(*.txt) 

のzsh:

ls *~*.txt 

注両方のシェルが必要であること拡張グロブオプションを有効にするには、shopt -s extglobとします。setopt extendedglobとします。zsh

+1

もう1つのzsh機能を見せてくれてありがとう!それは素晴らしいです。 –

34

これは、それはあなたのディレクトリにある.txtファイルが表示されませんあなた

LS --ignore = *。txtの

を助けることができます。 これはあなたの質問に対する正確な答えです。

+1

これは私のためにうまくいった。あなたはスイッチを一緒にして無視することができます。すべてのtxtファイル、ajで始まるすべてのファイル、および 'bar'を含むすべてのファイル: 'ls --ignore = * .txt --ignore = j * --ignore = * bar *' –

+0

私は不正なオプションを取得します。エルキャピタンでそれを使用してください ls --ignore = * pdf ls:違法オプション - - 使用法:ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [ファイル...] –

+1

ありがとうございました。実際にこれは受け入れられた答えでなければなりません!! – Veera

関連する問題