cp *.prj ../prjshp/ é o comando certo, mas você atingiu um caso raro em que ele atinge uma limitação de tamanho. O segundo comando que você tentou não faz nenhum sentido.
Um método é executar cp nos arquivos em partes. O comando find sabe como fazer isso:
find -maxdepth 1 -name '*.prj' -exec mv -t ../prjshp {} +
-
findatravessa o diretório atual e os diretórios abaixo dele recursivamente. -
-maxdepth 1significa parar em uma profundidade de 1, ou seja, não recorrer a subdiretórios. -
-name '*.prj'significa agir apenas nos arquivos cujo nome corresponde ao padrão especificado. Observe as aspas ao redor do padrão: ele será interpretado pelo comandofind, não pelo shell. -
-exec … {} +significa executar o comando especificado para todos os arquivos. Invoca o comando várias vezes, se necessário, tendo o cuidado de não exceder o limite da linha de comandos. -
mv -t ../prjshpmove os arquivos especificados para../prjshp. A opção-té usada aqui devido a uma limitação do comandofind: os arquivos encontrados (simbolizados por{}) são passados como o último argumento do comando, você não pode adicionar o destino após ele. / li>
Outro método é usar rsync .
rsync -r --include='*.prj' --exclude='*' . ../prjshp
-
rsync -r … . ../prjshpcopia o diretório atual para../prjshprecursivamente. -
--include='*.prj' --exclude='*'significa copiar arquivos que correspondem a*.prje excluir todo o resto (incluindo os subdiretórios, portanto,.prjarquivos nos subdiretórios não serão encontrados).