Eu tenho esta estrutura de pastas:
foo
`----> bar
Como posso extrair o conteúdo de bar
into foo
?
Eu tentei mv -f bar/* .
de dentro foo
.
-f, --força | não pergunte antes de substituir
mas recebo "não foi possível mover bar/ajax
para foo/ajax
porque o diretório não está vazio"
Como posso resolver isso?
mv
substituirá os arquivos, mas se recusará a substituir os diretórios . Não há um único comando que mesclará diretórios e removerá os diretórios de origem (que é provavelmente o que você deseja commv
). Mesmorsync --remove-source-files
vai deixar diretórios vazios.Você pode usar uma combinação de comandos:
que copia tudo
dev
para o diretório atual e, em seguida, remove odev
diretório.Ou:
que usa
rsync
para mover todos os arquivos e, em seguida, exclui os diretórios vazios deixados para trás.Problema em mãos
Você deseja mover o conteúdo de
foo/bar/
um nível parafoo/
.Estarei referenciando este post no superusuário , bem como este post do serverfault na solução.
Solução
De acordo com o usuário Stephan202 , você está procurando os seguintes comandos para executar esta tarefa:
Também deve ser possível, de dentro do
foo/bar/
, executar o seguinte comando:Verifique se você também tem as permissões corretas. Se necessário, execute o comando com privilégios de root(sudo).
Conclusão
Por favor, comente se você tiver alguma dúvida ou problema com esta resposta. Eu sugiro que você leia cada link que forneci antes de tentar os comandos. Agradeço feedback para corrigir quaisquer equívocos e melhorar minhas postagens. Posso atualizar minha resposta conforme necessário.
Boa sorte!
Edit: revisei esta resposta para indicar os prós e contras.
Algumas páginas de manual são bastante concisas porque as informações são mencionadas no manual de informações correspondente.
mv
não pode substituir diretórios não vazios, mas pode sobrescrever arquivos existentes pertencentes ao usuário que normalmente não são graváveis (o proprietário não tem permissões de gravação, cf a citação).Você pode mesclar os diretórios
foo/ajax
efoo/bar/ajax
manter todos os arquivos ou sobrescrever arquivos idênticos conforme proposto por @muru .No entanto, esse método não é adequado se o conteúdo desses diretórios não estiver relacionado. Pode não ser óbvio à primeira vista, então vamos ver uma nova árvore.
Podemos mover o conteúdo de
network/data
enetwork
optar por mesclar diretórios com o mesmo nome (veja abaixo).Como podemos ver, o diretório final
network/src
pode conter arquivos não relacionados após a movimentação. Se for indesejável, podemos renomear arquivos e diretórios com os mesmos nomes após a movimentação.Se você tiver um diretório
foo
que contém apenas um diretóriobar
. (bar
pode conter outras coisas).E você deseja renomear
foo/bar
→foo
, então faça:Você pode sair do
-T
semv
não tiver essa opção, porém torna mais seguro.Basta usar o comando mover:
Como Jeff Schaller sugere, use
antes do comando mv para mover arquivos ocultos e use a opção
-i
mv se você quiser uma verificação interativa antes de substituir