Добавить содержимое одного файла в начало другого файла

Мне нужно вставить текст из 1 файла вверху большого количества файлов в каталоге и его подкаталогах. Я был в состоянии сделать это успешно на основе файлов, используя ed:

ed -s FileToAddTo.txt <<< $'0r TextToAdd.txt\nw'

Однако, когда я заменяю FileToAddTo.txt на *.txt, ничего не происходит. Как я могу изменить это или использовать другую команду Unix, такую ​​как sed, для рекурсивного добавления содержимого TextToAdd.txt во все файлы в каталоге, заканчивающемся определенным расширением? например

ed -rs *.txt <<< $'0r TextToAdd.txt\nw'

Обратите внимание, что код над этой строкой не работает, он просто демонстрирует, чего я хотел бы достичь.

3 ответа

Решение

Как это:

cat TextToAdd.txt FileToAddTo.txt > $$.tmp && mv $$.tmp FileToAddTo.txt

то есть поместите новый заголовочный файл и исходный файл во временный файл, а затем, если он был успешным, переименуйте временный файл в исходный.

И запустить рекурсивно!! ПОЖАЛУЙСТА, ТЕСТ НА ЗАПИСАННЫХ ДАННЫХ!!!

find . -type f -name "*.txt" -exec sh -c "cat TextToAdd.txt {} > $$.tmp && mv $$.tmp {}" \;

Это работает очень хорошо для меня:

$ for fn in `find . -name '*.txt'`; do; cat textToAdd.txt $fn > $$.tmp && mv $$.tmp $fn; done;

Исходя из этого, вы можете попробовать:

for fn in `ls -R /folderName`; do cat "$fn" >> fileName;  done
Другие вопросы по тегам