Como o shell expande a parte A*.txt
para vários caminhos antes de ser passado para o comando que está sendo invocado ( cp
neste caso).
Isso significa que, no primeiro caso, se você tiver arquivos denominados A1.txt, A2.txt, A3.txt e A4.txt e diretórios A1, A2, A3 e A4, cada um contendo o arquivo output.txt, ele será expandido para algo como :
for X in A1.txt A2.txt A3.txt A4.txt ; do cp $X/output.txt output/$X.txt ; done
e no segundo caso, ele se expande para:
cp A1/output.txt A2/output.txt A3/output.txt A4/output.txt output/A*.txt
onde a parte output/A*.txt
pode ou não expandir dependendo se existe alguma coisa no diretório output
correspondente à glob. Se isso acontecer, fica ainda pior, como:
cp A1/output.txt A2/output.txt A3/output.txt A4/output.txt output/A8.txt output/A9.txt
Como cp
, quando dado vários arquivos de origem, quer um diretório de destino no final, ele não sabe como lidar com isso e simplesmente ergue as mãos e dá um erro.