たとえば、私のホームディレクトリには、「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