Используйте цикл.Выполните итерацию по каждому файлу *.txt
, отобразите его имя в выходном файле без новой строки (с помощью echo -n
,), добавьте его содержимое в выходной файл и, наконец, добавьте новую строку.Обратите внимание, что >>
добавляет.Использование >
приведет к перезаписи.
rm -f all.txt
for f in *.txt; do echo -n "$f " >> all.txt; cat "$f" >> all.txt; echo >> all.txt; done
Если ваши входные файлы уже содержат символ новой строки в конце, тогда вы пропускаете последний echo
и просто делаете:
for f in *.txt; do echo -n "$f " >> all.txt; cat "$f" >> all.txt; done
Есливы используете tcsh вместо bash, тогда вы можете использовать foreach
, но вы не можете написать весь цикл в одной команде.Обычно вы пишете это в сценарии:
foreach f (*.txt)
echo -n "$f " >> all.txt
cat "$f" >> all.txt
end
Чтобы получить это в одной командной строке, вам нужно что-то вроде этого:
printf 'foreach f (*.txt)\n echo -n "$f " >> all.txt\n cat "$f" >> all.txt\n end' | tcsh