BASH: добавление существующего содержимого файла к существующему файлу

Я должен добавить содержимое файла в конце каждого prefs.js файл. Пробовал с find -name 'prefs.js' -exec more filecontent >> '{}' \; но это не сработало.

5 ответов

Решение

Перенаправление не происходит для каждого файла (это сложно). Обходной путь - создать новую оболочку для каждого файла:

find -name 'prefs.js' -exec sh -c 'cat filecontent >> $1;' - '{}' \;

- необходимо, так как оно становится нулевым ($0) аргумент к sh

Кроме того, вы должны использовать cat вместо большего. More - это пейджер, который позволяет пользователям пролистывать документ.

Используйте xargs:

find -name 'prefs.js' | xargs -n1 bash -c 'cat content_to_be_added >> $1;' -
for f in `find -name 'prefs.js'`
do
    echo $f
    #cat $f >> outfile
    cat infile >> "$f"
done

Как насчет

find -name 'prefs.js' -exec dd if=filecontent conv=notrunc oflag=append of='{}' \;

Это предполагает filecontent это файл, содержащий то, что вы хотите добавить к prefs.js файлы.

Это работает, чтобы написать небольшой скрипт оболочки cbd.sh

#!/bin/bash

echo "filecontent" >> "$1"

конечно, вы можете заменить эхо с

cat "somefile"

и позвонить

find -name 'cbd[0-9].txt' -exec ./cbd.sh '{}' \;

в том же каталоге.

Синтаксис команды find с ее -exec - настоящий монстр.

Другие вопросы по тегам