Добавить содержимое одного файла в начало другого файла
Мне нужно вставить текст из 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