Localiza arquivos / pastas na pasta, exceto algumas pastas específicas

3

Estou tentando mover todos os arquivos de uma pasta para outra, exceto algumas pastas específicas.

Tentei mover todos os arquivos, exceto as pastas .git , assets ou build :

find .. ! -regex '\(.git\|assets\|build\)' | xargs mv -t ../build

O que eu salvo este comando para fazer:

  • Localize todos os arquivos / pastas na pasta pai que não sejam .git, assets ou build.
  • Mova esses arquivos / pastas para ../ build

A estrutura das pastas é assim:

.
├── application
├── assets
├── build
├── download_files
├── images
├── mybb
├── system
└── tools

Meu diretório de trabalho é a pasta de ferramentas.

Se eu executar find .. ! -regex '\(.git\|assets\|build\)' , ele ainda mostrará .git , assets e build.

O que há de errado com meu comando?

    
por EsTeGe 06.08.2012 / 16:25

2 respostas

3

Você pode ter perdido alguns caracteres curinga, tente

find .. ! -regex '\(.*\/\.git.*\|.*\/assets.*\|.*\/build.*\)'

Eu também incluí o separador de caminho (/) para que os recursos ou construções que aparecem como parte de um caminho não correspondam.

    
por jmetz 06.08.2012 / 16:31
0

Você também pode usar globs estendidos do bash para filtrar esses dirs. Primeiro, certifique-se de que extglob esteja ativado.

shopt -s extglob

então

mv ../!(assets|build) ../build

O glob não corresponderá aos arquivos que começam com . , portanto não é necessário filtrar .git . No entanto, se você quiser mover outros arquivos a partir de . , ative também a opção de shell dotglob.

shopt -s extglob dotglob
mv ../!(.git|assets|build) ../build
    
por geirha 07.08.2012 / 08:47

Tags