Estou tentando criar um script de cópia para copiar rapidamente uma pasta de usuário no OS X, excluindo todo o lixo (caches, backups antigos do iPhone, logs, etc.). Quanto a não copiar esses arquivos/pastas, não estou tendo problemas. O problema está na hora de selecionar o usuário. Quero criar uma lista de todos os usuários no computador, excluindo contas do sistema, e fazer com que o operador escolha qual pasta de usuário deseja fazer backup, apenas digitando um número em uma lista. Atualmente posso obter os usuários com o seguinte comando:
userList=`dscl . list /Users UniqueID | awk '$2 >= 400 { print $1; }'`
Por exemplo, isso retornará:
hiddenadmin fred joe kim
Gostaria de criar uma lista de seleção que mostre:
Please choose which user folder you would like to copy:
1) hiddenadmin
2) fred
3) joe
4) kim
Depois de ter o usuário, estou bem, mas não consigo criar a lista. Além disso, não há garantia de que os nomes seriam os mesmos, ou mesmo que o número de usuários seria o mesmo.
Caso você esteja se perguntando por que não procuro apenas na pasta /Users para criar a lista. Algumas contas podem estar ocultas e ter suas pastas de usuário em outro lugar, e não quero as pastas Guest
ou Shared
na lista. O problema aqui é que nem sei por onde começar.
Responder1
Hábastantede maneiras de fazer o que você está pedindo. Aqui está minha opinião rápida e suja.
Como você já tem seus usuários em uma variável, você só precisa de um for
loop para fazer a formatação. Usarei seus valores no meu exemplo:T
userList="hiddenadmin fred joe kim"
echo "Please choose which user folder you would like to copy:"
count=0
for name in $userList;do
count=$((count+1))
printf '\t%s) %s\n' $count $name
echo
done
read -p "Choose from $(eval echo {1..$count}): " CHOICE
Este loop irá ler seu userList
, inicializar um contador e usá-lo printf
para a saída. O \t
irá recuar suas seleções e \n
enviará um CRLF.
Depois que sua opção de menu for impressa, o read
comando solicitará a entrada do usuário e definirá sua seleção para a variável CHOICE
. Você pode reutilizar a count
variável na -p
opção de read
exibir opções válidas. Você terá que adicionar algum código adicional para validar a entrada. Você pode fazer isso com uma case
declaração simples.
case $choice in
1) #some code
;;
2) #some code
;;
*) echo "Invalid choice"
;;
esac