Você pode executar student_head
quando estiver em uma pasta para adicionar automaticamente o nome da pasta como um cabeçalho a arquivos graváveis nela e em seus subdiretórios:
student_head_action() {
# We can't use parameter expansion on $PWD because of recursion
local _dirname="${1%/*}"
_dirname="${_dirname##*/}"
[[ -d $1 ]] && return 0
if ! [[ -w $1 && -f $1 ]]; then
printf '%s\n' "$1 does not exist or is not writeable, skipping"
return 1
fi
bash -c "ed -s {} <<< $'0a\n'"# Student: ${_dirname}"$'\n.\n,s/\r//g\nw'"
}
student_head() {
local _file
if (( $# )); then
for _file; do
student_head_action "${_file}" || _retval=1
done
else
if shopt -s globstar > /dev/null 2>&1; then
for _file in **/*; do
student_head_action "${_file}" || _retval=1
done
shopt -u globstar
else
printf '%s\n' 'Globstar isn't available, attempting to use GNU find...'
find . -type f -writable -exec bash -c '
_dirname="${1%/*}\
_dirname="${_dirname##*/}\
ed -s "$1" <<< '"$'0a\n'"'"# Student: ${_dirname}"'"$'\n.\n,s/\r//g\nw'" {} \;
fi
fi
return "${_retval-0}"
}
Coloque essas funções em ~/.bashrc
se quiser que student_head
seja sempre acessível ao usuário ao usar bash
.
student_head
pode ser chamado de duas maneiras:
- Sem argumentos. Nesse modo, todos os arquivos graváveis no diretório atual e em seus subdiretórios têm o cabeçalho incluído.
- Com nomes de arquivos como argumentos. Neste modo, apenas os arquivos listados nos argumentos têm o cabeçalho adicionado.
Se um arquivo nos argumentos não existir, student_head
retornará um status de saída de 1.
Deve-se mencionar que este script usa globstar
, que requer bash>=4.0
.