Eu tenho um conjunto de comandos para alterar o conteúdo dos arquivos chamados MenuSettings que funcionam bem quando direcionados para uma pasta.
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
No entanto, quando eu tento executá-los através de várias pastas escrevendo isso
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
Eu recebo o erro
sed: MenuSettings.txt: No such file or directory
O que torna todos os comandos a seguir ineficazes, e acabo com um arquivo de texto em branco na raiz da minha pesquisa. MenuSettings.txt está em todos os diretórios com o nome Salford. E quando eu testo encontro para ecoar o que a procura dele mostra tudo bem. Eu tentei uma série de métodos de encontrar, mas sem sucesso, alguém pode ajudar
macos
command-line
bash
find
Eggfoot
fonte
fonte
Respostas:
for
não altera diretórios para você. Você deveria colocar${dir}/
na frente de suas referências de arquivo e alterar alguns'
citações para"
permitir a interpretação de variáveis de shellEu também removi um "Uso inútil de gato". Google isso.
fonte