Ao invocar um programa com um caractere curinga, o shell que você está usando tentará expandir esse caractere curinga e fornecerá os nomes de arquivos expandidos como argumentos ao executável. Se não puder ser expandido, o shell fornecerá os caracteres curinga como nomes de arquivos ao processo.
Veja o seguinte strace
output (os arquivos existem):
user@host:~$ mv test* /tmp/
execve("/bin/mv", ["mv", "test", "test1", "test2", "test3", "/tmp"], [/* 19 vars */]) = 0
Agora, esse strace
output (nenhum arquivo correspondente ao curinga existe).
user@host:~$ mv test* /tmp/
execve("/bin/mv", ["mv", "test*", "/tmp/"], [/* 19 vars */]) = 0
Ao mover um arquivo com mv
, o programa mv
primeiro tenta obter o status do arquivo. Isso foi feito com um syscall stat
(veja man 2 stat
). Se o status do arquivo (ou vários arquivos no seu caso) não puder ser reunido, o processo mv
não poderá continuar.
No segundo caso, o syscall stat falha:
lstat("test*", 0x7fff20d26490) = -1 ENOENT (No such file or directory)
Para encurtar uma história longa : Não existem arquivos que correspondam à declaração ACQ*.err
.