递归地将文件内容添加到shell中的文件中

时间:2013-11-22 13:41:52

标签: linux bash shell

在shell中我希望做到以下几点:

对于在/ etc / test /文件夹中找到的每个文件,取出内容并将其添加到以下内容中:

/root/.ssh/authorized_keys

我们的想法是在此文件夹中包含文件,每个文件都有一个密钥,并且对于找到的每个文件,该密钥都会添加到authorized_keys中。

我是shell的新手,但这是我得到了多远:

#!/bin/bash
FILES=/etc/test/*
for f in $FILES
do
  echo "Adding $f key"
  cat $f >> /root/.ssh/authorized_keys
done

然而,当我运行它时它似乎无法工作。任何人都可以告诉我为什么它可能无法正常工作吗?

2 个答案:

答案 0 :(得分:0)

尝试使用find进行递归文件搜索,并使用cat将其输出作为命令行参数传递给xargs

find /etc/test/ -type f -print0 | xargs -0 cat >> /root/.ssh/authorized_keys

答案 1 :(得分:0)

将作业引用到FILES变量。编写方式如果/etc/test中没有文件,则会为FILES分配文字字符串/etc/test/*。如果只有一个文件,那么您的脚本将正常工作。如果有多个,该行将展开为FILES=/etc/test/file1 /etc/test/file2 ...,暂时将/etc/test/file1分配给FILES,然后尝试以其余文件作为参数运行/etc/test/file2 ,这可能会失败。