Mover o conteúdo do diretório atual para cima um nível e sobrescrever se existir recursivamente [duplicado]

1

Eu descompactei um zip no local atual que chamaremos de /httpdocs , tudo dentro do zip reside em um diretório que chamaremos de myfiles .

Em /httpdocs há milhares de diretórios e arquivos que também existem exatamente nos mesmos caminhos que no diretório myfiles .

Eu preciso mover o conteúdo do diretório myfiles para /httpdocs enquanto substituo os diretórios / arquivos que já existem ... recursivamente.

Se eu tentar do diretório myfiles :

mv * ../

Me perguntam se eu quero sobrescrever se existe ... y / n para cada arquivo!

Se eu tentar de /httpdocs :

mv myfiles/* .

Me perguntam se eu quero sobrescrever se existe ... y / n para cada arquivo!

Se eu tentar aplicar o operador -f force, ele retornará que não pode mover porque Directory not empty .

Agora, pelo que eu li, não parece que o que eu estou tentando fazer é realizável com o comando mv , que é provavelmente o motivo pelo qual eu não estou obtendo absolutamente nada com isso.

Estou ciente de cp e rsync e muitos outros, mas não tenho certeza qual comando é o melhor a ser usado para mover apenas o conteúdo do diretório para outro local e sobrescrever se existir recursivamente.

Eu sei que eu poderia fazer isso facilmente apenas enviando para /httpdocs via FTP em qualquer cliente local e apenas 'Sim para todos' no diálogo de sobrescrever, mas levaria apenas anos, então nem sempre é prático - eu sou apenas após um like-for-like sobre a linha de comando realmente.

    
por zigojacko 15.11.2018 / 11:37

1 resposta

1

Conforme discutido em esta pergunta , o comando mv não fornece diretamente uma maneira de 'mesclar' diretórios sobrescrevendo arquivos existentes.

Os comandos cp e rm podem ser usados juntos como uma alternativa equivalente. Neste caso, o comando seria:

cd /path/to/httpdocs
cp -r myfiles/* .
rm -r myfiles/

Nota: O comando cp sobrescreve os arquivos existentes por padrão. O OP tinha um alias interferindo nesse processo. O comando cp foi aliased para cp -i , que pede confirmação interativa em cada sobrescrita. Isso pode ser substituído executando unalias cp primeiro ou usando a sintaxe \cp -r .. .

    
por 15.11.2018 / 12:22

Tags