/ aから「a」または「c」で始まるファイルを一覧表示する方法。[閉まっている]


10

試しましたls /etc/[ac]*が、aまたはcで始まるディレクトリとその内容全体が表示され、「a」または「c」で始まるファイルは表示されません。


ディレクトリは、多くの種類のファイルの 1つです。どのタイプのファイルに関心がありますか(通常、シンボリックリンク、デバイス、パイプ、ソケット...)?
ステファンChazelas

「ディレクトリ」でディレクトリの内容について話しているのか、ディレクトリ名自体について話しているのかは明確ではありません。表示するコマンドは、パターンに一致するディレクトリの内容を一覧表示しls -d /etc/[ac]*ます。一致するディレクトリの内容は取得できませんが、ディレクトリ名は表示されます。これがあなたの望んでいることなのか、それともディレクトリ名をリストすることさえ避けたいのかははっきりしていません。
クサラナンダ

回答:


23

ディレクトリの内容を一覧表示しないようにするには、次の方法があります。

ls -d /etc/[ac]*

またはで始まる通常のファイル名とともにディレクトリが一覧表示されます。ac

完全を期すために、関係しfindないソリューションは次のようになります。

ls -ld /etc/[ac]* | grep ^- | tr -s ' ' | cut -d' ' -f9

私の質問の最初の読みもls -d適切に思われましたが、元の質問では、展開または非展開に関係なく、ディレクトリを一覧表示しないように指定されているようです。
Chris Down

1
ls -ld /etc/[ac]* | grep ^- | tr -s ' ' | cut -d' ' -f9解析しませんls
Avinash Raj

1
@AvinashRaj:そうですね、そのアドバイスの妥当性は、このソリューションが1回だけ機能するのか、それとも永遠に機能するのかによって異なります。一度だけなら、パースlsは私の意見では公正なゲームです。
グレッグヒューギル2014年

3
彼はポイントを持っています。の名前は/etc正気である可能性が非常に高いlsですが、フィールド番号が変更されるため、単純なスペースはアプローチを壊します。でも+1 ls -ld
terdon

1
ロケール(LC_ALL=C)も修正する必要があります。他のロケールでは、日付に3つのフィールドがあるとは限りません。
ステファンChazelas

7

再帰的に:

find /etc -type f -name '[ac]*'

非再帰が必要な場合は、移植性のある方法でこれを行うことができます。

find /etc/. ! -name . -prune -type f -name '[ac]*'

または、これは移植性がありません(GNUまたは最近のBSD検索):

find /etc -type f -maxdepth 1 -name '[ac]*'

この大文字と小文字を区別せずに実行する場合は、の-iname代わりにを使用してください-name


1
通常のファイル-type f用であることに注意してください。代わりにディレクトリ以外のファイルが必要な場合は、に置き換えます(ディレクトリへのシンボリックリンクも除外する場合はGNUに置き換えます)。! -type d! -xtype dfind
ステファンChazelas

1

このコマンドも試すことができます、

for file in /etc/[ac]*; do echo $file; done | xargs file | awk -v FS=" +" '$2~/directory/ {next;} {print $1}' | sed 's|\/etc\/||g;s/://g'

1

ディレクトリ(コンテンツではない)とファイルの両方が必要な場合は、printfbultin を使用できます。

printf "%s\n" [ac]*

例:

$ printf "%s\n" [te]*
examples.desktop
teamviewer_linux.deb
test.php
test.txt

質問で要求されているように、これはディレクトリをどのように回避しますか?
Chris Down

ああ、私の読み違い。OPはディレクトリが必要だが、その内容は不要だと思います。
cuonglm

その編集について申し訳ありませんが、完全に誤読されています。
terdon

1

なしの非再帰find

ls -pd /etc/[ac]* | grep -v '/$'

これ-pにより、/ディレクトリの最後にa が追加され、grepフィルタで除外されます。もちろん、改行などの特殊文字を含むファイル名には機能しません。


1

zsh

print -rl /etc/[ac]*(.)

またはで始まる名前のにリストされている通常のファイル(のよう-type ffind)をリストします。グロブの最後の部分は、グロビング修飾子と呼ばれるzsh固有の機能です。グロビング修飾子は通常のファイルを意味します/etcac(xxx).

グロブが一致しない場合はzsh、コマンドを中止します。他のBourneのようなシェルでは、グロブが一致しない場合、パターンがそれ自体に拡張されるため、またはで始まるファイルがない場合ls -d /etc/[ac]*、呼び出されたファイルが誤ってリストされる可能性があることに注意してください。/etc/[ac]*ac/etc

print -rl /etc/[ac]*(^/)

あるファイルリストしていないタイプのディレクトリをし、

print -rl /etc/[ac]*(-^/)

シンボリックリンクを解決した後、タイプがディレクトリでないファイルをリストします。


-3

次で始まる表示ファイルの場合:

ls etc |  grep ^a

cで始まるファイルを表示する場合:

ls etc |  grep ^c
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.