使用“echo append >> file”递归地进行操作

3

我希望在文件夹中的每个文件末尾添加一行内容。我知道可以使用

echo apendthis >> file

如何递归地将字符串附加到单个文件中?

3个回答

8
find . -type f -exec bash -c 'echo "append this" >> "{}"' \;

1
只希望没有文件名中含有双引号。更安全的方法是通过位置参数传递路径: find . -type f -exec bash -c 'echo "要附加的内容" >> "$1"' _ {} ';' - Josh Cartwright
当您想要添加的文本不止一行时,该如何处理? - Bluz

2

字面上还是比喻上...

你是指"recursively"应该被理解为字面上的意思还是比喻上的意思?如果你真的在寻找特定的递归解决方案,可以像下面这样实现:

operate () {
  for i in *; do
    if [ -f "$i" ]; then
      echo operating on "$PWD/$i"
      echo apendthis >> "$i"
    elif [ -d "$i" ]; then
      (cd "$i" && operate)
    fi
  done
}

operate

否则,就像其他人所说的那样,使用find(1)会更容易。

1
另一种方法是使用循环:

find . -type f | while read i; do
    echo "apendthis" >> "$i"
done

只是为了澄清,这个答案是递归的,因为find命令将搜索所有子目录。当需要执行多个命令时,我发现这很有用。但我同意DigitalRoss的答案是真正的递归。 - user000001

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接