Jesse_b já respondeu à pergunta, mas acho que vale a pena abordar alguns possíveis equívocos.
O shell tem caracteres que possuem um significado especial sob algumas condições específicas. Por exemplo: | é usado em pipelines, > em redirecionamentos, \ para caracteres de escape, etc. Esses caracteres não são interpretados literalmente pelo shell, e é por isso que quando você faz echo foo>bar , foo>bar won não será impresso no seu terminal, mas foo será redirecionado para o arquivo bar .
Felizmente, o shell também possui um mecanismo que faz com que esses caracteres percam seu significado especial: citando. Em shells POSIX, existem 3 mecanismos de cotação :
-
Barra invertida
\ : preserva o valor literal do caractere seguinte, com exceção de <newline> .
-
As aspas duplas
"..." : preservam o valor literal de todos os caracteres entre aspas duplas, com exceção dos caracteres ' , $ e \ .
-
As aspas simples
'...' : preservam o valor literal de cada caractere entre aspas simples, sem exceções.
Então, seguindo o exemplo anterior, se quiséssemos imprimir foo>bar literalmente, poderíamos ter feito:
-
echo foo\>bar
-
echo "foo>bar"
-
echo 'foo>bar'
O asterisco * é um desses caracteres especiais, faz parte da correspondência de padrões notação e é usada para expansão de nome de arquivo . Em outras palavras, comandos como echo *.txt substituirão o padrão pelos arquivos que o padrão corresponde.
No seu caso, cron_daily/wp_cli.sh* corresponde apenas a cron_daily/wp_cli.sh , por isso mv vê dois argumentos idênticos e reclama. Tudo bem, porque não há arquivo cron_daily/wp_cli.sh* . Mas se você tivesse um arquivo cron_daily/wp_cli.sh* real e mais arquivos que pudessem ser correspondidos pelo padrão, mv teria falhas.
Considere o seguinte cenário:
$ ls -l
total 0
-rw-rw-r-- 1 user group 0 jul 14 12:00 file*
-rw-rw-r-- 1 user group 0 jul 14 12:00 file1
-rw-rw-r-- 1 user group 0 jul 14 12:00 file2
-rw-rw-r-- 1 user group 0 jul 14 12:00 file3
Se eu tentar renomear file* sem usar aspas:
$ mv file* new_file
mv: target 'new_file' is not a directory
Isso porque esses são os argumentos que mv recebe, portanto new_file deve ser um diretório:
$ printf '[%s]\n' file* new_file
[file*]
[file1]
[file2]
[file3]
[new_file]
Para renomear com sucesso file* , preciso citar esse argumento:
$ mv 'file*' new_file
$ ls -l
total 0
-rw-rw-r-- 1 user group 0 jul 14 12:00 file1
-rw-rw-r-- 1 user group 0 jul 14 12:00 file2
-rw-rw-r-- 1 user group 0 jul 14 12:00 file3
-rw-rw-r-- 1 user group 0 jul 14 12:00 new_file