Os scripts são tão semelhantes que eu os combinaria em um script. Isso levaria dois argumentos: uma opção -tar
ou -csv
para indicar como os arquivos devem ser expandidos e um nome de diretório para onde cd
.
MODE=$1
FOLDER=$2
DATE_LOG='date "+%Y-%m-%d-%H:%M:%S"'
LOG_FILE=/home/kamil/Desktop/Script/log_$DATE_LOG.txt
case "$mode" in
-tar) SUFFIX=tar.gz
CMD="tar -xvf"
;;
-csv) SUFFIX=csv
CMD="cat"
;;
*) echo Invalid mode "$mode" >&2; exit 1 ;;
esac
if ! cd "$FOLDER"
then echo "Bad folder $FOLDER" >&2
exit 1
fi
for file in *.SUFFIX; do
contents='$CMD $file'
echo -n "$contents" "|" | sed -r 's/(.*)_[0-9]{8}_[0-9][0-9]-[0-9][0-9].[0-9][0-9].csv//'
head -1 "$contents"
done | tee $LOG_FILE
As coisas que você está fazendo no loop for
não parecem corretas, suspeito que sejam mais erros de cópia. Espero que você consiga descobrir como encaixar o que você está fazendo na estrutura acima. A idéia geral é encontrar todos os locais onde os dois scripts diferem e colocá-los em variáveis que são definidas na instrução case
. Você pode não conseguir fazer tudo com substituições simples de variáveis como eu fiz - você pode precisar de uma instrução if
também.
Isso é chamado de princípio DRY .
Se as pastas forem sempre as mesmas, dependendo do modo, você poderá colocar a atribuição FOLDER
na instrução case
, em vez de exigi-la na linha de comando. Você também pode substituir a opção da linha de comando por um menu como na resposta do muru.