<premiered>
我想删除*.nfo 文件(包括子目录)中包含的行。
这是我使用的命令
find . -type f -name '*.nfo' -exec sh -c '
file="$0"
echo "$file"
sed -i -e '/<premiered>/d' "&file"
read line </dev/tty
' {} ';'
不幸的是,我得到的只是
-bash: premiered: No such file or directory
有什么问题,我该如何解决?
答案1
问题是引号不能嵌套,所以你实际上是关闭之前引用/<premiered>/d
并在之后再次打开它们。这意味着它<premiered>
会暴露给调用 shell,其中<
和>
被解释为重定向运算符。
实际上没有必要将 sed 命令包装在 shell 命令中 - 您可以直接将其作为以下参数运行find ... -exec
:
find . -type f -name '*.nfo' -exec sed -i -e '/<premiered>/d' {} \;
如果您还想回显文件名,请添加单独的-print
:
find . -type f -name '*.nfo' -print -exec sed -i -e '/<premiered>/d' {} \;