.txtから単語を抽出し、マスター.txtを作成します。

.txtから単語を抽出し、マスター.txtを作成します。

たとえば、私のホームディレクトリには、「Anna」「Andrew」などのように、「a」で始まる名前を含むa.txtを含むaディレクトリがあります。 。 x、y、zまでの名前などを含むb.txtを含むbディレクトリがある基本ディレクトリでも同じことが繰り返されます。名前を抽出し、すべての人の名前を含むmaster.txtを作成するにはどうすればよいですか?

答え1

以下を使用してこれを実行できます。コマンドとファイル名拡張子。これらのファイルがすべてソースディレクトリにあり、/path/to/directoryそのディレクトリに他のファイルがない場合、最も簡潔なコマンドは次のとおりです。

cat /path/to/directory/*/*.txt > master.txt

master.txtこれにより、ソースディレクトリ内のすべてのファイルの関連コンテンツを含む現在のディレクトリに名前が付けられたファイルが作成されます。メモ:これには、ソースディレクトリのすべてのサブディレクトリにあるすべてのファイルが含まれます。

ディレクトリに別のファイルがある場合(またはより正確なファイルが必要な場合)、次のコマンドを使用できます。

cat /path/to/directory/[a-z]/[a-z].txt > master.txt

これはソースディレクトリの次のファイルとのみ一致します。

a/a.txt
a/b.txt
a/c.txt
.
.
.
z/x.txt
z/y.txt
z/z.txt

ソースディレクトリに別のファイルがあるか、類似のファイルがありますが、サブディレクトリ名がファイルのデフォルト名と一致せず、a/z.txtそのファイルを除外する場合は、より正確なコマンドを使用して一致するファイルのリストを絞り込む必要があります。 。この場合、以下を使用できます。支柱の拡張そしてforループ:

for letter in {a..z}; do \
    cat "/path/to/directory/${letter}/${letter}.txt"; \
done >> master.txt

これは質問に指定したファイルと正確に一致し、それ以外は何も一致しません。

答え2

ホームディレクトリのパスを変更してmain_dirスクリプトに保存し、ターミナルで実行します。sh ./script-name.sh

#!/bin/bash
for i in $( cd main_dir && ls ); do
    cat "main_dir/$i/$i.txt" >> "master.txt"
done

関連情報