Como copio isso usando a linha de comando do Unix / Linux?

3

Eu tenho uma estrutura de pastas assim:

MAT11NA_09_XX_XX_XXX
MAT11NA_09_XX_XX_XXXL
MAT11NA_11_XX_XX_XXX
MAT11NA_11_XX_XX_XXXL
MAT11NA_10_XX_XX_XXX
MAT11NA_10_XX_XX_XXXL

Eu quero copiar deste servidor para outro apenas a pasta MAT11NA_09_XX_XX_XXX , mas não MAT11NA_09_XX_XX_XXX L . Quando eu terminar com isso, quero copiar MAT11NA_09_XX_XX_XXX L , mas não MAT11NA_09_XX_XX_XXX . Esta parte MAT11NA_09_ não muda, o L no final também não muda.

O mesmo para o resto das pastas ...

Como faço isso na linha de comando do Unix / Linux?

Obrigado.

    
por Dennis Williamson 02.10.2009 / 20:42

4 respostas

5

Com um "L"

cp -r *L destination

Sem um "L"

cp -r *[^L] desyination
    
por 02.10.2009 / 21:19
1

Eu sei que é estúpido, mas pelo menos é direto.

Isto irá copiar todos os arquivos / diretórios que terminam com L:

cp 'ls | grep -E 'L$'' DEST

Isso copiará todos os arquivos / diretórios NÃO terminando com L:

cp 'ls | grep -vE 'L$'' DEST

Substitua DEST pelo seu destino.

    
por 02.10.2009 / 20:50
1

Para aqueles que você quer o L, faça:

scp -r MAT*L destserver:/whatever/

Para aqueles que não têm L, você quer Globs estendidos com bash:

shopt -s extglob
scp -r ./!(MAT*L) destever:/whatever/

Eu não testei isso com scp, mas isso é uma maneira de fazer isso. Você também pode considerar usar o comando find com algo parecido com (para aqueles que não são com L).

find . ! -iname 'MAT*L' ! -iname '.*' -print0 | xargs -0 tar zcf foo.tar.gz

e depois copie o arquivo tar.

    
por 02.10.2009 / 21:05
0

Ok, eu tentei todos eles.

" scp -r MAT*L destserver:/whatever/ " - este parece estar funcionando.

shopt extglob
scp -r ./!(MAT*L) destever:/whatever/

Para este eu executei o comando " shopt extglob ", depois fiz a cópia. Mas eu recebi esse erro " -bash: !: event not found " ... então, não está funcionando.

Eu também tentei a primeira resposta ... A estrutura da pasta é mais ou menos assim:

folder1
   MAT11NA_09_XX_XX_XXX
   MAT11NA_09_XX_XX_XXXL
   MAT11NA_11_XX_XX_XXX
   MAT11NA_11_XX_XX_XXXL
   MAT11NA_10_XX_XX_XXX
   MAT11NA_10_XX_XX_XXXL   

Eu quero pegar MAT11NA_09_XX_XX_XXX pastas e colocar em uma pasta em outro servidor.

Então eu quero pegar a pasta MAT11NA_09_XX_XX_XXXL e colocar em outra pasta em outro servidor.

Então ... Eu quero pegar MAT11NA_11_XX_XX_XXX pastas e colocar em uma pasta (diferente da pasta onde eu coloco MAT11NA_09_XX_XX_XXX ) em outro servidor.

O mesmo para MAT11NA_11_XX_XX_XXXL ...

Eu não quero colocar TODAS as pastas L em uma pasta de outro servidor e não quero colocar TODAS as pastas não-L em outra pasta de outro servidor.

Espero que você entenda desta vez, desculpe. Obrigado.

UPDATE

Ok, depois da última resposta estou usando isso e parece que eles estão trabalhando:

scp -r MAT11NA_09_*L contentuser@/destination

scp -r MAT11NA_09_*[^L] contentuser@/destination
    
por 02.10.2009 / 21:30

Tags