GNU/Linux >> Linux の 問題 >  >> Linux

名前がBashの2つのパターンに一致するすべてのファイルを開くまたは一覧表示するにはどうすればよいですか?

何千ものファイルがあるディレクトリがあるとします。名前に「red」と「green」の両方の文字列が含まれているすべてのファイルを開くにはどうすればよいですか?

承認された回答:

(ファイルの名前を探していることを前提としています 両方を含む 文字列「赤」および 文字列「緑」)

無意味にbashを使用して、=~を使用して「red」と「green」に対してファイル名をテストします。 正規表現一致演算子:

for f in *
do
  [[ $f =~ red && $f =~ green ]] && echo Bash: yes: "$f" || echo Bash: no: "$f"
done

caseを使用して標準のシェル構文を使用するには 同じファイルを見つけるためのグロブ:

for f in *
do 
  case "$f" in
    *green*red*|*red*green*) echo Case: yes: $f;; 
    *) echo Case: no: $f;; 
  esac
done

シェルのグロビングを使用すると、さらに簡単になります:

printf "Glob: %sn" *green*red* *red*green*

サンプル実行:

$ touch a b aredgreenb agreenredb agreenbred aredbgreen red green redgreen greenred

$ for f in *
>     do
>       [[ $f =~ red && $f =~ green ]] && echo Bash: yes: "$f" || echo Bash: no: "$f"
>     done
Bash: no: a
Bash: yes: agreenbred
Bash: yes: agreenredb
Bash: yes: aredbgreen
Bash: yes: aredgreenb
Bash: no: b
Bash: no: green
Bash: yes: greenred
Bash: no: red
Bash: yes: redgreen


$ for f in *
>     do
>       case "$f" in
>         *green*red*|*red*green*) echo Case: yes: $f;;
>         *) echo Case: no: $f;;
>       esac
>     done
Case: no: a
Case: yes: agreenbred
Case: yes: agreenredb
Case: yes: aredbgreen
Case: yes: aredgreenb
Case: no: b
Case: no: green
Case: yes: greenred
Case: no: red
Case: yes: redgreen

$ printf "Glob: %sn" *green*red* *red*green*
Glob: agreenbred
Glob: agreenredb
Glob: greenred
Glob: aredbgreen
Glob: aredgreenb
Glob: redgreen

Linux
  1. Linuxですべてのファイルをサイズ別に一覧表示または並べ替える方法

  2. ログインしているすべてのユーザーを一覧表示する方法

  3. テキストファイルをすべて大文字または小文字に変換する方法

  1. 2 つのディレクトリにまたがるすべての一意のファイルを検索/一覧表示する方法は?

  2. 現在の bash セッションで開いているファイル記述子 (およびそれらが参照するファイル) を一覧表示する方法

  3. Linuxでパーティションのすべてのファイルを一覧表示する方法は?

  1. Linuxで開いているすべてのポートのリストを見つける方法

  2. 名前がファイルリストの行と一致しないディレクトリ内のすべてのファイルを削除しますか?

  3. Aptパッケージによってインストールされたすべてのファイルを一覧表示するにはどうすればよいですか?