web-dev-qa-db-ja.com

_one_シェルグロブ式を使用してすべてのファイル(もちろん隠しファイルも!)を一覧表示するにはどうすればよいですか?

わかりました、この質問はUnix/Linuxシェルを対象としています!すべてのファイルに一致するシェルグロブ別名wildchard-)式が必要です---(含む現在のディレクトリ内の隠しファイルを非再帰的に(maxdepth == 1)。これまでのところ、2つのコマンドを実行するか、長い回避策を使用する必要があります(以下を参照)。

ls -lad *vim*
ls -lad .*vim*

zshの使用中。しかし、ダッシュとバッシュについても同じことを覚えていれば、そうでしょう?

短い回避策:

  • ls -la | grep vim
  • find . -maxdepth 1 | grep vim

しかし、私は百回疑問に思いました、これに対する単純なグロブの解決策はありません、そしてなぜ*ドット文字と一致しませんか?

7
math

*does.文字と一致します。

名前の最初の文字である場合、単に.と一致しません。これは、ファイルを「隠す」ためのいわゆる「ドットファイル」メカニズムを提供します。

zsh

GLOB_DOTSシェルオプションを設定します。これは、zshユーザーマニュアルの§14.8にあります。このオプションがオンになっている場合でも、.および..は常に除外されることに注意してください。

bash

dotglobシェルオプションを設定します。これは、bashユーザーマニュアルの§3.5.8にあります。 GLOBIGNORE Shell変数を設定すると、暗黙的にdotglobが設定されることに注意してください。 bashが有効になっている場合、zshdotglobとは異なり)は...を自動的に除外しません。しかし、そのbashwillGLOBIGNOREが設定されている場合にそれを行います。したがって、GLOBIGNORE=.を設定すると、...を除いてdotglobおよびがオンになります。

In GNU find

何もしないでください。 findutils 4.2.2の時点で、-name-inamealreadyのグロブは、最初の文字がドットの名前と一致します。これは、findutilsユーザーマニュアルの§2.1.1にあります。

11
JdeBP

オプションを変更したくない場合は、次のいずれかを実行します。

ls -ld {,.}*vim*
ls -ld *vim* .*vim*
find . -maxdepth 1 -name "*vim*"
3
daniel kullmann

Bashで、dotglobオプションを有効にします。

shopt -s dotglob

デフォルトでは、隠しファイルは、驚きや煩わしさを引き起こさないように非表示になっています。たとえば、ホームディレクトリでlsを実行し、先月のファイルをいくつか確認し、rm *net*で無意識のうちに削除しようとします。注意深く書かれた.nethackrc

3
user1686

ZSHでは(GLOB_DOTSを変更せずに)次のことができます

  ls -lad *vim*(D)
2
simou

@daniel kullmanの答えに基づいて構築するために、これは、厳密には単一のゴブではありませんが、かなり単純なグロブで必要なことを達成しているようです。

隠しファイルを含め、現在のディレクトリ内のすべてのファイルで文字列「blah」を再帰的に検索し、親ディレクトリ構造を検索する「..」を除外します。

grep blah {,.}[!.]*
1
user58389