0

ls を使用して拡張子を持つディレクトリ内のファイルのみを検索する必要があります (検索は使用できません)。

ls *.* を試しましたが、dir に拡張子の付いたファイルが含まれていない場合、「そのようなファイルまたはディレクトリはありません」が返されます。

私はそのエラーを望んでおらず、拡張子を持つファイルがある場合は ls を cmd プロンプトに戻したいと思っています。

同じことを達成するために、grepをlsで使用しようとしています。

ls|grep "*.*" - 機能しませんが、ls | grep "\." 動作します。

grep *.* が機能しない理由がわかりません。どんな助けでも大歓迎です!

ありがとう!

4

3 に答える 3

2

正しい解決策はこれだと思います:

( shopt -s nullglob ; echo *.* )

少し冗長ですが、どんなファンキーなファイル名を使用していても常に機能します。ls(へのパイプの問題grepは、典型的なシステムでは、たとえば改行など、ファイル名に非常に奇妙な文字が許可されていることです。)

このshopt -s nullglob部分はシェルの opt オプションを有効 ("セット" nullglob )にします。このオプションは、名前が一致するファイルがない場合、そのまま*.*にして*.*おくのではなく、削除する (つまり、何も展開しない) ように Bash に指示します。

括弧(...)はサブシェルを設定するためのものであるため、nullglobオプションはスクリプトのこの小さな部分に対してのみ有効になります。

于 2013-04-08T04:04:30.637 に答える