1

У меня есть набор команд для изменения содержимого файлов, называемых 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. И когда я проверяю находку, чтобы повторить то, что его поиск показывает все хорошо. Я пробовал несколько методов поиска, но безрезультатно, кто-нибудь может помочь

1 ответ1

0

for не меняет каталоги для вас. Вы должны положить ${dir}/ перед вашей ссылки файлов, а также изменить некоторые ' , чтобы позволить оболочки переменной интерпретации

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

Я также удалил "Бесполезное использование кошки". Google это.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .