我有以下的 bash
脚本,对于找到的每个图片都会重复执行。它需要遍历所有的 html、css 和 js 文件,并在文件中替换所有出现的图片。
for image in app/www/images-theme-dark/*.png
do
echo "installing icon" $image
# extract filename from iconpath
iconfile=$(basename $image)
iconPath="images/"$(basename $image)
# replace paths in all files containing icon paths
find app/www -type f \( -name "*.html" -or -name "*.css" -or -name "*.js" \
-or -name "*.appcache" \) \
-exec sed -i '' -e 's|$iconPath|images-theme-dark/$iconfile|g' "{}" \;
done
然而当我运行脚本时,
sed
会出现以下错误信息:sed: can't read : No such file or directory
。在StackOverflow上,我找到了解决方法sed: can't read : No such file or directory ,但我已经在{}
周围加上了引号。当我使用echo命令输出sed
命令并手动在命令行中执行时,没有发生错误。 我正在Raspbian GNU/Linux 8.0(jessie)上使用GNU sed v4.2.2。有谁能看出这里可能出了什么问题吗?
sed -i
后面的''
是指定备份文件的后缀名,如果你不想保留备份文件,可以将其设置为空字符串。 - melpomene-i
的意思是“就地编辑”,也就是直接在文件中进行编辑。-i ''
的意思是“编辑一个文件,该文件的名称为空字符串”。由于您很可能实际上没有一个名称为空字符串的文件,因此sed
报错无法读取该文件。 - AlexP-i
之后立即添加备份副本的后缀,而不是作为单独的参数。例如,sed -i.bak
将直接编辑文件并通过追加.bak
来创建备份。如果使用单独的参数,则会将其视为要编辑的文件名。已在GNUsed
4.2.2上进行了测试。 - AlexP