私は試した ls /etc/[ac]*
ですが、aまたはcで始まるディレクトリと、 "a"または "c"で始まるファイルではなく、内容全体。
ディレクトリの内容を一覧表示しないようにするには、次の方法があります。
ls -d /etc/[ac]*
これにより、ディレクトリnamesとともに、a
またはc
で始まる通常のファイル名がリストされます。
完全を期すために、find
を含まない解決策は次のようになります。
ls -ld /etc/[ac]* | grep ^- | tr -s ' ' | cut -d' ' -f9
再帰的に:
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
を使用してください。
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]*(-^/)
シンボリックリンクを解決した後、タイプがディレクトリでないファイルをリストします。
ディレクトリの内容ではなくディレクトリとファイルの両方が必要な場合は、printf
bultinを使用できます。
printf "%s\n" [ac]*
例:
$ printf "%s\n" [te]*
examples.desktop
teamviewer_linux.deb
test.php
test.txt
このコマンドも試すことができます
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'
find
なしの非再帰的:
ls -pd /etc/[ac]* | grep -v '/$'
-p
は、ディレクトリの最後に/
を追加します。これは、grep
によって除外されます。もちろん、改行などの特殊文字を含むファイル名には機能しません。