Como eu posso mudar de cima para baixo utilizando (três) parâmetros no bash? [fechadas]

0
  1. Eu tenho que fazer um script bash que irá mudar os nomes dos arquivos de baixo para cima OU de cima para baixo via parâmetros na linha de comando. Então, quando eu coloco na linha de comando:

./ bashScript inferior superior

então todos os arquivos no diretório devem mudar de minúscula para maiúscula.

  1. Eu também tenho que adicionar o terceiro parâmetro que me permitirá alterar apenas um arquivo específico. Então, por exemplo, eu tenho que ser capaz de colocar na linha de comando:

    ./ bashScript lower upper fileName

por versaces 24.11.2018 / 16:50

2 respostas

0

Os operadores bash para alterar o caso das variáveis são ${var^^*} para cima e ${var,,*} para menor, então:

#! /bin/bash -
die() { printf >&2 '%s\n' "$@"; exit 1; }
usage() { die "Usage:" "  $0 "{"lower upp","upper low"}"er [files]"; }

(( $# >= 2 )) || usage 
from=$1 to=$2; shift 2

[[ $from   =  @(upper|lower) ]] &&
[[ $to     =  @(upper|lower) ]] &&
[[ "$from" != "$to"          ]] || usage

shopt -s nullglob dotglob
IFS= ret=0

(( $# > 0 )) || set -- *[[:$from:]]*

for file do
  case $to in
    (upper) newfile=${file^^*};;
    (lower) newfile=${file,,*};;
  esac
  [[ "$file" = "$newfile" ]] ||
    echo mv -i -- "$file" "$newfile" ||
    ret=$?
done
exit "$ret"

Remova o echo quando terminar de testar.

    
por 24.11.2018 / 22:32
0

Se não for o dever de casa, use o rename

de Larry Wall
  • rename 'y/A-Z/a-z/' * para converter para minúsculas.
  • rename 'y/a-z/A-Z/' * para converter em maiúsculas.

Não sei se isso funciona para todos os idiomas, mas é o exemplo no manual.

    
por 24.11.2018 / 18:49