1. Простой подход:
echo 'Hello, world.' > foo.txt
< file.txt xargs -L 1 cp foo.txt
rm foo.txt
Команда cat сильно перегружена; когда вы видите cat filename | command , вы можете изменить его на command < filename или, что эквивалентно, < filename command .
Опция -L 1 для xargs говорит ему о необходимости читать только одну строку из file.txt за раз; поэтому, если file.txt содержит file1 и file2 (в отдельных строках), xargs будет запущен
cp foo.txt file1
cp foo.txt file2
Я полагаю, остальное не требует пояснений.
Если вы хотите поместить все это в одну строку, просто объедините строки с &&:
echo 'Hello, world.' > foo.txt && xargs -L 1 cp foo.txt < file.txt && rm foo.txt
Я переместил < file.txt в конец команды xargs , куда люди обычно ее помещают.
2. Более гибкий
Вы, вероятно, захотите сделать что-то более сложное и сложное, чем записать одну и ту же строку в каждый файл.
Эта команда:
xargs sh -c 'for f do echo "Hello, world." > "$f"; done' sh < file.txt
передает имена файлов в качестве вызова оболочки sh который затем может сделать что - нибудь к имени файла (ссылка как "$f" , что вы могли бы сделать из командной строки.
И, очевидно, с этим методом вам не нужно создавать и удалять временный файл.
3. Без использования xargs
Вы можете упростить вышеизложенное до
while IFS= read -r f
do
echo 'Hello, world.' > "$f"
done < file.txt
который по сути совпадает с предыдущим ответом, за исключением того, что на этот раз оболочка читает файл file.txt , поэтому вам не нужны xargs .