web-dev-qa-db-ja.com

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

私は試した ls /etc/[ac]*ですが、aまたはcで始まるディレクトリと、 "a"または "c"で始まるファイルではなく、内容全体。

10
3df

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

ls -d /etc/[ac]*

これにより、ディレクトリnamesとともに、aまたはcで始まる通常のファイル名がリストされます。

完全を期すために、findを含まない解決策は次のようになります。

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

再帰的に:

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を使用してください。

7
Chris Down

zshの場合:

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

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

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

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

notタイプdirectoryであるファイルをリストし、

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

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

1

ディレクトリの内容ではなくディレクトリとファイルの両方が必要な場合は、printf bultinを使用できます。

printf "%s\n" [ac]*

例:

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

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

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
Avinash Raj

findなしの非再帰的:

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

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

1
Anthon