web-dev-qa-db-ja.com

選択したいくつかを除くすべてのファイルをcat

選択したファイルを除いて、ディレクトリ内のすべてのファイルをcatできるように特定の構文がある場合。たとえば、いくつかのファイルがある場合を除いて、ファイルごとに約3行または4行の、いくつかの行を含む最大1200のテキストファイルがあるとします。

readme.md
contrib.rst
licence.txt

長いです。上記の3つ(または可能であればそれ以上)のファイルを除くすべてのファイルの内容を表示したいと思います。

次のコマンドを試しました。

cat !{readme.md,contrib.rst,licence.txt}*.*

どこかでcatの使用法を次のように見たからです。

cat [!t][!m][!p]*.sh

それ以来、{a,b}は、bashスクリプトのセットを意味し、それが機能することを否定します。もちろん私は間違っていました。

1
hjpotter92

Bashの拡張パターンマッチング機能でこれを試してください。

shopt -s extglob
cat !(readme.md|contrib.rst|licence.txt)
4
Cyrus

これをbashで試してください:

GLOBIGNORE="readme.md:contrib.rst:licence.txt"
cat *
unset GLOBIGNORE
2
Cyrus

すでに何を試しましたか?

スキップしたいのは常に同じファイルですか。

その場合、コマンドでそれらをハードコーディングできます。例えば。何かのようなもの
find ! -name readme.md -o ! -name contrib.rst -o ! -name licence.txt -exec cat {} \+

ここで、事前にファイル名を知らずに4行を超えるすべてのファイルをスキップするものが必要な場合、ソリューションは明らかに複雑になります。その場合は投稿を編集してください。

1
Hennes

現在のシェル設定を変更せずにサブシェルで各Cyrusプロポーザルを実行することが可能です

(GLOBIGNORE="readme.md:contrib.rst:licence.txt" ; cat *)

と同様

(shopt -s extglob; cat !(readme.md|contrib.rst|licence.txt))
1
Hastur