#!/bin/bash
# Get directory name from argument, default is .
DIR=${1:-.}
# For each subfolder in DIR (maxdepth limits to one level in depth)
find "${DIR}" -maxdepth 1 -type d | while read dir; do
# Check that there is a file called $dir.grade.xml in this dir
dirname=$(basename "${dir}")
gradefile="${dirname}"/"${dirname}".grade.xml
if [ -e "${gradefile}" ]; then
sed -i .bak "s/foo/bar/g" "${gradefile}"
else
echo "Warning: ${dir} does not contain ${gradefile}"
fi done
Pequenos ajustes no framework do Raphink.
Pontos principais:
- verifique diretamente a existência de arquivos com
[ -e filename ]
em vez de executar ls - coloque todas as variáveis em
${variablename}
; geralmente não é estritamente necessário, mas evita ambigüidade (${variablename}
e${variable}name
são claramente distintos,$variablename
poderia significar também) - passar uma extensão para sed para fazer arquivos de backup. Isso é uma boa prática (no caso de o seu erro funcionar), e, no OSX, obrigatório (a versão do raphink interpreta
s/foo/bar/g
como a extensão que você quer nos arquivos de backup, então tenta analisar o nome do arquivo como um comando). li> - Ok, eu menti, não é realmente obrigatório - você pode usar
sed -i "" "s/foo/bar/g" ${gradefile}
para passar uma extensão vazia, o que faria com que o sed não fizesse backup.