1

bash スクリプトで、文字列に一致するすべてのファイル (先頭にドットがあるファイルを含む) を一覧表示したいと考えています。

例えば

    ls -A

私にくれます

    .bla.0  .bla.1  bla.2   bla.3

みたいな表現が欲しいです

    for f in <whatgoeshere?>${pat}* ; do
      <something with $f>
    done

私は使用しようとしました

    shopt -s extglob

および ?(.)bla* と ?(\.)bla* の何らかの形式がありますが、役に立ちません。

私は使用できます

    shopt -s dotglob

しかし、それを使用せずにパターンを指定する方法があるかどうか疑問に思っていました。

これは機能しますが、あまりエレガントではありません。

    for f in `shopt -s dotglob ; ls -A *${pat}*` ; do echo $f; done
4

3 に答える 3

2

ls -A次のように、コマンドをfindスイッチ-regexに置き換えることができます。

while read f; do echo $f; done < <(find . -maxdepth 1 -regex ".*${pat}.*")
于 2013-08-14T09:47:03.013 に答える
2
pat=bla

for i in .${pat}* ${pat}*; do
    echo $i
done
于 2013-08-14T09:56:24.797 に答える
2

extglobs は必要ありません。次のようなものを使用してください:

for f in {.,}${pat}* ; do
    [[ $f == "." || $f == ".." ]] && continue
    echo $f
done

アップデート:

名前にスペースが含まれるファイルが予想される場合は、findベースのソリューションを使用してください。

于 2013-08-14T09:56:56.910 に答える