for newfile in `find . -type f ! -path "./data/*" ! -name new_changes.txt`; do
if ! grep -q "\$newfile" new_changes.txt; then
rm \$newfile;
fi
done
如果sh """#!/bin/bash +x
在代码块的开头给出以上代码,则上述代码可以正常工作。但是当它被注释掉时-抛出以下错误
rm:无法删除“ $ newfile”:没有这样的文件或目录
关于如何修改此for循环而无需工作的任何建议sh """#!/bin/bash +x
?
@alaniwi已经在他的评论中解释了您rm
命令中的错误。您正在尝试删除名称为的文件$newfile
,并且可能没有任何以美元符号开头的文件。
另一个问题类似,但不完全相同:您的grep
命令搜索文字字符串$newfile
,而您可能希望搜索存储在变量newfile中的字符串。因此,您必须删除\
。
但这仍然意味着变量newfile
的内容可以作为正则表达式进行解释。例如,如果newfile
具有值abc.txt
,grep
则new_changes.txt
仅包含也将成功abcdtxt
。为避免此错误,应使用-F
grep选项,以避免将其解释为正则表达式。
而且,还有一个错误:Saynewfile
具有value abc
,并且new_changes.txt
包含just xxxabc
,但是它们仍然匹配,因为abc
是的子字符串xxxabc
。为避免此错误,应使用-x
grep选项,该选项将强制匹配整行。
因此,您的命令应为 grep -qFx "$newfile" new_changes.txt
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句