Estou tentando criar um script bash que realize as seguintes tarefas:
- Leia um nome de arquivo binário.
- Verifique se o nome do arquivo binário de entrada contém
A1
ouB1
(sem distinção entre maiúsculas e minúsculas). - Dependendo da string identificada se contém
A1
copy todirA/
, caso contrário se contémB1
copy todirB/
.
Atualmente tenho as tarefas 1 e 2 resolvidas, mas gostaria de receber alguma orientação sobre a tarefa 2.
Copie todos os arquivos no diretório atual que contém a substring
A1
em seus nomes paradirA
(um diretório que supostamente existe) e, em seguida, copie todos os arquivos comB1
seus nomes paradirB
da mesma maneira:ou, usando
--
para delimitar opções de linha de comando de operandos de nome de arquivo,Isso ignoraria arquivos com nomes ocultos (nomes começando com um ponto). Se você precisar incluí-los, defina a opção
dotglob
shell antes de executar os comandos.bash
shopt -s dotglob
Abordando a questão atualizada, que é sobre um script que recebe um ou vários nomes de arquivos em sua linha de comando e que precisa movê-los para o diretório correto com base em seus nomes de arquivos.
Você pode usar
case ... esac
para testar se uma determinada string (nome do arquivo) corresponde a um padrão e então definir o diretório de destino com base no resultado desse teste. No código abaixo, também geramos uma mensagem de aviso se nenhum dos padrões corresponder:Novamente, presume-se que os diretórios de destino existam. Caso contrário, você pode criá-los antes do
cp
comando, commkdir -p -- "$destdir" || exit
.