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 {} +
-
find
atravessa o diretório atual e os diretórios abaixo dele recursivamente. -
-maxdepth 1
significa 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 ../prjshp
move 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 … . ../prjshp
copia o diretório atual para../prjshp
recursivamente. -
--include='*.prj' --exclude='*'
significa copiar arquivos que correspondem a*.prj
e excluir todo o resto (incluindo os subdiretórios, portanto,.prj
arquivos nos subdiretórios não serão encontrados).