AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 451081
Accepted
Black
Black
Asked: 2018-06-22 03:59:14 +0800 CST2018-06-22 03:59:14 +0800 CST 2018-06-22 03:59:14 +0800 CST

Como mover o conteúdo de uma pasta para a pasta atual?

  • 772

Eu tenho esta estrutura de pastas:

foo
`----> bar

Como posso extrair o conteúdo de barinto 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/ajaxpara foo/ajaxporque o diretório não está vazio"

Como posso resolver isso?

cp mv
  • 5 5 respostas
  • 21196 Views

5 respostas

  • Voted
  1. Best Answer
    muru
    2018-07-06T02:58:21+08:002018-07-06T02:58:21+08:00

    mvsubstituirá 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 com mv). Mesmo rsync --remove-source-filesvai deixar diretórios vazios.

    Você pode usar uma combinação de comandos:

    cp -a dev/. .
    rm -r dev
    

    que copia tudo devpara o diretório atual e, em seguida, remove o devdiretório.

    Ou:

    rsync -a --remove-source-files dev/ .
    find dev -depth -type d -exec rmdir {} \;
    

    que usa rsyncpara mover todos os arquivos e, em seguida, exclui os diretórios vazios deixados para trás.

    • 18
  2. kemotep
    2018-07-06T03:08:43+08:002018-07-06T03:08:43+08:00

    Problema em mãos

    Você deseja mover o conteúdo de foo/bar/um nível para foo/.

    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:

    cd /path/to/foo/bar
    mv * .[^.]* ..
    

    Também deve ser possível, de dentro do foo/bar/, executar o seguinte comando:

    (shopt -s dotglob; mv -- * ..)
    

    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!

    • 2
  3. user286944
    2018-07-06T09:25:07+08:002018-07-06T09:25:07+08:00

    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.

    Cara

    -f, --força

           não pergunte antes de sobrescrever

    Informações

            Nota: mv substituirá apenas diretórios vazios no destino. Diretórios preenchidos conflitantes são ignorados com um diagnóstico.

    [...]

    -f, --força

           Se existe um arquivo de destino, mas normalmente não é gravável , a entrada padrão é um terminal e a opção -fou --forcenão é fornecida, mvsolicita ao usuário se deseja substituir o arquivo. (Você pode ser o proprietário do arquivo ou ter permissão de gravação em seu diretório.) Se a resposta não for afirmativa, o arquivo será ignorado.

    mvnã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).

    foo    
    |-- ajax
    `-- bar
        `-- ajax
    

    Você pode mesclar os diretórios foo/ajaxe foo/bar/ajaxmanter 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.

    prompt% tree home/network
    home/network/
    ├── data
    │   ├── img
    │   │   └── demo.png
    │   └── src
    │       ├── contact.pdf
    │       └── report.pdf
    ├── hardware
    │   ├── api
    │   ├── docs
    │   └── src
    │       └── driver.c
    ├── misc
    │   └── src
    │       └── init.py
    ├── README
    └── src
        ├── main.c
        └── manager.c
    

    Podemos mover o conteúdo de network/datae networkoptar por mesclar diretórios com o mesmo nome (veja abaixo).

    prompt% cp -ab home/network/data/* home/network
    prompt% rm -r home/network/data/*
    prompt% tree home/network
    home/network/
    ├── data
    ├── hardware
    │   ├── api
    │   ├── docs
    │   └── src
    │       └── driver.c
    ├── img
    │   └── demo.png
    ├── misc
    │   └── src
    │       └── init.py
    ├── README
    └── src
        ├── contact.pdf
        ├── main.c
        ├── manager.c
        └── report.pdf
    

    Como podemos ver, o diretório final network/srcpode 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.

    prompt% mv -b -S "_data" home/network/data/* home/network
    prompt% tree home/network
    home/network/
    |-- README
    |-- data
    |-- hardware
    |   |-- api
    |   |-- docs
    |   `-- src
    |       `-- driver.c
    |-- lib
    |   `-- demo.png
    |-- misc
    |   `-- src
    |       `-- init.py
    |-- src
    |   |-- contact.pdf
    |   `-- report.pdf
    `-- src_data
        |-- main.c
        `-- manager.c
    
    • 1
  4. ctrl-alt-delor
    2018-07-06T10:15:49+08:002018-07-06T10:15:49+08:00

    Se você tiver um diretório foo que contém apenas um diretório bar. ( barpode conter outras coisas).

    E você deseja renomear foo/bar→ foo, então faça:

    mv -T foo foo.original
    mv -T foo.original/bar foo
    rmdir foo.original
    

    Você pode sair do -Tse mvnão tiver essa opção, porém torna mais seguro.

    • 0
  5. Jean-Paul Sabatier
    2018-06-22T04:03:36+08:002018-06-22T04:03:36+08:00

    Basta usar o comando mover:

    cd foo
    mv bar/* .
    

    Como Jeff Schaller sugere, use

     shopt -s dotglob 
    

    antes do comando mv para mover arquivos ocultos e use a opção -imv se você quiser uma verificação interativa antes de substituir

    • -2

relate perguntas

  • Como ler múltiplos argumentos por linha para um comando bash?

  • Como faço uma duplicata de uma árvore de diretórios com links simbólicos duplicados relativamente?

  • Ubuntu 16.04: `mv` executado erroneamente com `~/*` como alvo e não consegue entender o resultado

  • cp se comporta de maneira estranha quando . (ponto) ou .. (ponto ponto) são o diretório de origem

  • Como mv .bin bin

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve