#!/bin/bash while read mydir; do echo "$:" >> output.txt cat $mydir/*.txt >> output.txt done < <(find test* -type d )
Это перебирает все каталоги внутри directory1
и делает именно то, что вы хотите. Обратите внимание, что вы должны запустить этот скрипт внутри directory1
.
Некоторые объяснения:
Первый find test* -type d
запуск, который печатает имя каждого подкаталога в каждой строке. Затем эти выходные данные read mydir
запускаются для запуска всего в while
цикле один раз для каждой строки ( $mydir
присваивается каждой строке (так называемое имя поддиректории)).
Затем в первой строке цикла записывается имя каталога, за которым следует двоеточие output.txt
, >>
что означает «добавить в файл» (если файл не существует, он будет создан).
Во второй строке цикла записывается содержимое каждого *.txt
файла в подкаталоге output.txt
, опять же, в «режиме добавления».
Моя тестовая настройка (с сохраненным выше скриптом createfile.sh
):
$ ls * test1: fileA.txt test2: fileB.txt test3: fileC.txt $ bash createfile.sh $ cat output.txt test1: file content from dir1 test2: test content from dir2 test3: test content from dir3