Copia recursivamente o conteúdo das subpastas [closed]

0

Eu quero copiar o conteúdo das pastas src para novos diretórios em um local diferente que tenha os nomes dos diretórios-pai dos diretórios src originais.

Aqui está uma ilustração do que estou tentando alcançar.

Entrada

source/folder1/src
source/folder2/src
source/folder3/src

Saída (todas as pastas devem conter o conteúdo da pasta src )

dest/folder1
dest/folder2
dest/folder3
    
por Rajkeshwar Prasad 31.08.2017 / 08:09

3 respostas

5

Você pode usar for

for d in /path/to/source/*; do echo mkdir /path/to/dest/"$(basename $d)" && echo cp -rvb -- /path/to/source/"$d"/src/* /path/to/dest/"$(basename $d)"; done

Se você estiver fazendo isso a partir do diretório pai de source e dest , poderá usar caminhos relativos:

for d in source/*; do echo mkdir dest/"$(basename $d)" && echo cp -rvb -- "$d"/src/* dest/"$(basename $d)"; done

Após o teste, remova echo para realmente copiar os arquivos

for d in source/*; do mkdir dest/"$(basename $d)" && cp -rvb -- "$d"/src/* dest/"$(basename $d)"; done

Mais legível ...

for d in /path/to/source/*; do 
  echo mkdir /path/to/dest/"$(basename $d)" && 
  echo cp -rvb -- /path/to/source/"$d"/src/* /path/to/dest/"$(basename $d)"
done
    
por Zanna 31.08.2017 / 08:38
4

com tar :

(cd source; tar c .) | tar x --transform 's:/src::' -C dest
  • cd source; tar c . cria um arquivo tar do diretório source e envia para o pipe
  • o segundo tar lê esse arquivo do canal e, em seguida,
  • extrai ( x ) para o diretório dest ( -C dest ),
  • aplica o sed command s:/src:: no caminho resultante (remova a primeira ocorrência de /src no caminho)

Isso pressupõe que o nome real do diretório source (e os de folder1 , folder2 , etc.) não contém src .

    
por muru 31.08.2017 / 08:24
0

Você só precisa adicionar -r para copiar todas as subpastas e arquivos, -r fará isso recursivamente

cp -r source/folderX/src dest/folderX

    
por Krunal Sonparate 31.08.2017 / 08:23