bash - 在 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 在开头附加一行。
解决方案
改用 xargs 来捕获 find 的结果
while read -r name
do
find ./ -iname "$name" |xargs sed -i '1s/^/NEW LINE INSERTED \n/'
done <fileNames.txt
推荐阅读
- python - 将 2*2 像素图像(每个图像由 1 x 4 numpy 向量给出)重新排列为单个 8 x 8 矩阵,而不使用 for 循环
- arrays - 为什么我的 MATLAB 代码会重复除空格之外的所有符号,但会删除这些符号?
- javascript - 为什么人们在关闭后尝试重新连接 Websockets?
- c++ - 如何将 std::string 转换为 L 数据类型
- php - 有时()条件验证中的验证规则数组
- r - 在 r 中从数据库中的抓取字符串转换整数
- python - 我正在使用 python 和 opencv 拍摄图像;但是,图像质量未显示正确尺寸的图像
- python - 为超时 UDP 连接创建一个循环
- service - 创建服务后系统崩溃:如何重新启动它?
- javascript - 定位我使用 JavaScript Chrome 扩展创建的这个元素