【发布时间】:2019-02-19 17:06:10
【问题描述】:
我有一个 .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 在开头附加一行。
【问题讨论】:
-
你还需要
find -exec吗?为什么不能直接使用sed?名称是否因大小写而异?还是它们在目录树中的某个地方? -
@BenjaminW。是的,文件位于树中的不同位置。
-
fileNames.txt是否使用 DOS 行尾? -
另外,仅仅因为您可以回显
$name的值并不一定意味着当前目录中有一个具有该名称的文件。 -
@CharlesDuffy 在包含 xtrace 时获得正确的输出,我认为 dos2unix unix 有所帮助。这次我使用命令进行了转换,之前我只是在notepad++中尝试。感谢您的帮助。