で始まるファイルのみを表示します。(非表示)


11

隠しファイルのみを表示しようとしましたが、どうすればいいのかわかりません。

それは機能しています(ただし、他の場所のドットも一致しています)

ls -la | grep '\.'

追加しようとしました^が、解決策が見つかりませんでした。


1
構文解析lsは決して素晴らしいアイデアではありませんが、アンカー^を使用して一致の開始を示す場合は、試してもうまくいきます。 ls -la | grep '^\.'
devnull 14

3
いいえ、そうではありません。ファイル名は、-lフラグを指定した行の先頭ではありません。 ls -la | awk '$9 ~ /^\./'意志。
yoonix 2014

回答:



5
find . -type f -name '\.*' -print 

すべての隠しファイルをディレクトリ階層の下にリストする場合は、機能する必要があります。


2

ls出力を解析する場合は^、正規表現の先頭に追加し、-lオプションを使用しないでください。を使用する-lと、各行の出力は、ファイルまたはフォルダの名前ではなく、ファイルまたはフォルダのアクセス権情報から始まります。だからあなたはこのように使うべきです:

ls -Ad | grep '^\.'

または、printfbashビルトインで実行できます。

printf "%s\n" .*

を使用する場合、以下を使用zshできます。

print -l .*

1

隠しファイルのみを検索する他の2つの方法を次に示します。

find . -maxdepth 1 -name ".*" -type f -ls

または

find . -maxdepth 1 -name ".*" -type f -printf "%P \n"

-maxdepthディレクトリツリーで検索する距離を指定するために使用します。


1

Flupの答えの改善:

ls -lad .[!.]* ..?*

これは、名前がドットで始まり、.でもでもないすべてのファイルをリストします..

あなたはパイプに出力したい場合は、そのノートlsにはgrep(これは、devnullによって尖ったアウトとして、良いアイデアになることはありません)、必ず使用させる\lsか、command ls場合ので、lsあなたの色の出力を表示するためにエイリアスされ(それは例えばDebianの上にあるもの) 、その出力には、色付きの出力を作成するためのANSIエスケープシーケンスが含まれておりgrep、そのパターンが行の先頭にアンカーされている場合は、トリップします。


1
あなたは使用することができます-A(代わりのを-a無視して)...
OJFord 2017

@ OJFord + -Aは、子孫-aとなるディレクトリの場合とは異なりますlsが、どちらも(等しく)無視され、コマンドラインで指定された名前-dに対して有効ではありません。また、lsがエイリアスされている--color=auto 場合、パイピングは問題ありません。のみ--color=alwaysまたは--colorトラブルを引き起こします。
dave_thompson_085

0

val0x00ffのソリューションは本当に良いですが、隠しディレクトリを忘れてしまいます。

あなたが隠しファイル 隠しディレクトリが欲しいなら、なしで。そして..:

find -maxdepth 1 -regex '\./\..+' -printf "%P\n"

あなたの提案はVMware ESXiで失敗し(ファイルもディレクトリもリストされません)、Linuxでも失敗します(maxdepth> 1の場合、。で始まるディレクトリ内のファイルもリストされます)が、これはLinuxとESXiの両方で機能します:find . \( -type f -o -type d \) -name '\.*' -print; maxdepth必要に応じて適用してください。
Jeroen Wiert Pluimers、2018年

0

1つ以下は非常にコンパクトで、多くのバリアントをサポートします

1)非表示のファイル、ディレクトリ、サブディレクトリを表示する

find . | grep "^\./\."

2)非表示のディレクトリとサブディレクトリのみを表示します

find . -type d | grep "^\./\."

3)現在のサブディレクトリにある隠しファイルのみを表示する

find . -type f | grep "^\./\."

4)現在のフォルダー内の隠しファイルとディレクトリを表示する

find . -maxdepth 1 | grep "^\./\."


0

あなたが試すことができます:

find . -maxdepth 1 -type f -name '\.*' -print
find . -maxdepth 1 \( -type f -o -type d \) -name '\.*' -print

もちろん、異なるmaxdepth値を使用したり、完全に削除したりできます。ディレクトリ-type d)または通常のファイルtype f)またはその両方の間を探索し、次のような他の機能と組み合わせる場合に非常に役立ちます。

(に基づいて、例えば最終更新日時、@piroux例-によって完成@イェルーン・wiert-pluimers

find . -maxdepth 1 \( -type f -o -type d \) -name '\.*' -exec stat -c %y {} \; -printf "%P\t"

-1

あなたが試すことができます :

ls -a |grep -E  "^\."

^は、正規表現でコンテンツの始まりであることを示します


1
3年前の別の回答の複製...
ジェフシャラー

私は前の答えを見ました、それは重複しておらず、間違いなく「ls -a」と「ls -Ad」は同じ意味を持っていません。「-a」は、「/」で始まるすべてのファイル/ディレクトリを含むリストを意味します。-Aは、「。」を除くすべてをリストすることを意味します。、「..」およびディレクトリの内容。
Lingjing France
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.