我有一组命令来更改名为 MenuSettings 的文件的内容,当这些命令指向文件夹时,它们可以正常工作。
cd /Applications/snowflake/table-updater/Testing/Applications/Salford_100
sed -e '1r MenuSettings.bak' -e '1,2d' MenuSettings.txt >> MenuSettings2.txt
cat MenuSettings2.txt | sed '/^AppName: */{h;s///;x;}; /^\(AppName_.._..:\).*/{s//\1/;G;s/\n/ /;}' >> MenuSettings3.txt
rm -v MenuSettings2.txt
mv -v MenuSettings3.txt MenuSettings.txt
但是当我尝试在多个文件夹中运行它们时,写入
for dir in $(find salford_* -type d);do
sed -e '1r MenuSettings.bak' -e '1,2d' MenuSettings.txt >> MenuSettings2.txt
cat MenuSettings2.txt | sed '/^AppName: */{h;s///;x;}; /^\(AppName_.._..:\).*/{s//\1/;G;s/\n/ /;}' >> MenuSettings3.txt
rm -v MenuSettings2.txt
mv -v MenuSettings3.txt MenuSettings.txt
done
我得到了错误
sed: MenuSettings.txt: No such file or directory
这使得以下所有命令都无效,最终我在搜索的根目录中得到了一个空白的文本文件。MenuSettings.txt 在每个带有 Salford 名称的目录中。当我测试 find 以回显其搜索的内容时,它显示一切正常。我尝试了许多 find 方法,但都无济于事,有人能帮忙吗
答案1
for
不会为您更改目录。您应该${dir}/
在文件引用前面添加,并更改一些'
引号以"
允许 shell 变量解释
for dir in $(find salford_* -type d);do
sed -e "1r ${dir}/MenuSettings.bak" -e '1,2d' ${dir}/MenuSettings.txt >> ${dir}/MenuSettings2.txt
sed '/^AppName: */{h;s///;x;}; /^\(AppName_.._..:\).*/{s//\1/;G;s/\n/ /;}' ${dir}/MenuSettings2.txt >> ${dir}/MenuSettings3.txt
rm -v ${dir}/MenuSettings2.txt
mv -v ${dir}/MenuSettings3.txt ${dir}/MenuSettings.txt
done
我还删除了“cat 的无用用途”。Google 一下。