やってみましたls [a-z][a-z]
、しかしそれは機能していないようです。
Bashを使用して、一致の欠落がエラーをトリガーしないようにグロブ設定を設定します。
shopt -u failglob # avoid failure report (and discarding the whole line).
shopt -s nullglob # remove (erase) non-matching globs.
ls ?c c?
疑問符は、単一の文字を表すグロブ文字です。 2文字のファイル名が必要なため、そのうちの1つはc
である必要があり、最初の文字または最後の文字のいずれかになります。
shopt -s dotglob
を使用すると、.c
という名前のファイルも表示されます。
一致するファイルがない場合、これらのシェルオプションを設定すると、すべての引数が削除され、その結果、裸のls
-デフォルトですべて/すべてがリストされます。
代わりにこれを使用してください:
shopt -s nullglob ## drop any missing globs
set -- ?c c? ## populate the $@ array with (any) matches
if [ $# -gt 0 ] ## if there are some, list them
ls -d "$@"
fi
find
を使用する方が良いと思います。
find . -type f -name '*c*' -name '??'
それは再帰的に検索します。現在のディレクトリ内のファイルのみを一覧表示するには:
find . ! -name . -Prune -type f -name '*c*' -name '??'
bash
内:c
の後に文字(_?c
_)が続くか、または文字(_.
_とdotglob
を含む)の後にc
(_?c
_)が続きます。
_shopt -s extglob failglob dotglob
printf '%s\n' @(?c|c?)
_
c
を含まないファイル(!(*c*)
)または2文字でないファイル(!(??)
)を除くすべてのファイル。ここでは、二重否定を使用して結合を実現しています。
_shopt -s extglob failglob dotglob
printf '%s\n' !(!(*c*)|!(??))
_
zsh
内:printf '%s\n' (?c|c?)(D)
(ここで、D
はdotglob
を有効にします。failglob
(nomatch
ではzsh
と呼ばれます)はデフォルトでオンになっています)。
_~
_ except演算子と_^
_否定拡張演算子を使用した二重否定:
_set -o extendedglob
printf '%s\n' *c*~^??(D)
_
ksh93
_内:ksh93にはnomatch
/failglob
オプションはありませんが、手動で行うことができます。
_FIGNORE='@(.|..)' # only ignore . and .. and not the other dotfiles
files=(~(N)@(?c|c?))
if ((${#files[@]})); then
printf '%s\n' "${files[@]}"
else
echo >&2 No match
exit 1
fi
_
(ここで~(N)
は、そのグロブに対してnullglob
を有効にします)。
_ksh93
_には結合演算子があります。したがって、ここでは、files=(...)
行を次のように変更することもできます。
_files=(~(N)@(*c*&??))
_