首页 > 解决方案 > 在 while 循环中使用 find 和 exec

问题描述

我有一个 .txt 文件,其中包含各种文件的名称。

当我简单地使用while循环时,它工作正常,

while read -r name
do
  echo "$name"
done <fileNames.txt

但是,当我尝试在循环内使用 find 时,如下所示:

while read -r name
do
  find ./ -iname "$name" -exec sed -i '1s/^/NEW LINE INSERTED \n/' '{}' ';'
done < fileNames.txt

什么都没发生!

如果我在循环外使用 find ,就像使用特定文件名一样,它会做它应该做的事情,我也可以在所有具有特定文件类型的文件上使用它,但它在循环内不起作用。

我在这里做错了什么?

我正在尝试从文件中读取文件名,在文件夹中递归搜索它,然后使用 sed 在开头附加一行。

标签: bashsedgit-bash

解决方案


改用 xargs 来捕获 find 的结果

while read -r name
do
  find ./ -iname "$name" |xargs sed -i '1s/^/NEW LINE INSERTED \n/'
done <fileNames.txt

推荐阅读