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 / 772032
Accepted
jsx97
jsx97
Asked: 2024-03-11 02:25:58 +0800 CST2024-03-11 02:25:58 +0800 CST 2024-03-11 02:25:58 +0800 CST

cp, barra final e cópia para o mesmo ou para outro diretório

  • 772

Para copiar um diretório para outro diretório, o primeiro diretório deve ser escrito sem a barra final:

# example 1
# this command will copy dir1 to dir2
# (dir2 is preexisting)
cp -Rip dir1 dir2/

Caso contrário, o comando copiará o conteúdo do diretório e não o próprio diretório:

# example 2
# this command will copy dir1 contents to dir2
# (dir2 is preexisting)
cp -Rip dir1/ dir2/

Eu entendo a diferença entre dir1e dir1/aqui, e a diferença entre como esses dois comandos se comportam não me confunde.

Mas para copiar o diretório não para outro diretório, mas para o mesmo diretório onde está localizado atualmente, a barra final não fará nenhuma diferença. Por que?

# example 3
# any of these commands will make a dir1 copy
# (dir1-copy isn't preexisting)
cp -Rip dir1 dir1-copy/
cp -Rip dir1/ dir1-copy/

E outra questão intimamente relacionada. Por que não há diferença entre como mv dir1/ dir2/e mv dir1 dir2/trabalho? Em outras palavras, por que, em relação à barra final no final do diretório de origem, mvsegue a lógica do terceiro cpexemplo, e não a lógica dos exemplos um e dois?

macOS 14.3.1, zsh 5.9 (x86_64-apple-darwin23.0)

freebsd
  • 1 1 respostas
  • 89 Views

1 respostas

  • Voted
  1. Best Answer
    Gilles 'SO- stop being evil'
    2024-03-15T07:37:47+08:002024-03-15T07:37:47+08:00

    A diferença de comportamento entre cp -R dir1 dir2e cp -R dir1/ dir2é um recurso que foi adicionado ao FreeBSD na versão 5.4 . Pelo menos foi então que a seguinte frase foi adicionada ao manual para a descrição da -Ropção:

    Se source_fileterminar em /, o conteúdo do diretório será copiado em vez do próprio diretório.

    É possível que esse comportamento fosse mais antigo e o 5.4 apenas preenchesse uma omissão na documentação. Não há nada sobre isso nas notas de versão 5.0 , 5.1 , 5.2 , 5.3 ou 5.4 . Eu não fui mergulhar na fonte.

    Versões modernas do FreeBSD e macOS que possuem utilitários de linha de comando do FreeBSD mantiveram esse comportamento. Outros sistemas (GNU, BusyBox, OpenBSD, NetBSD ou qualquer outro compatível com POSIX) não possuem esse comportamento: cp -R dir1/ dir2e cp -R dir1 dir2possuem exatamente o mesmo comportamento (exceto quando dir1é um link simbólico: dir1/faz com que o link seja seguido).

    O comportamento do FreeBSD pode ter sido inspirado no rsync, que tem a mesma distinção. Acho estranho que eles tenham feito uma mudança incompatível com versões anteriores que se desviou

    Mas para copiar o diretório não para outro diretório, mas para o mesmo diretório onde está localizado atualmente, a barra final não fará nenhuma diferença. Por que?

    É uma decisão de design estranha. Ou talvez não tenha sido uma decisão de design, mas um bug de implementação (analisando o caminho de origem e decidindo que a parte após a barra final é um componente do caminho) que eles decidiram chamar de recurso. Com o rsync, a barra final mantém seu comportamento mesmo quando o diretório de destino não existe.

    Por que não há diferença entre como mv dir1/ dir2/e mv dir1 dir2/trabalho?

    Não deveria haver diferença (supondo que dir1não seja um link simbólico), então esse é apenas o estado normal das coisas.

    • 4

relate perguntas

  • FreeBSD com duas interfaces de rede e domínios diferentes

  • Problemas do Freebsd 11.1 com falha no teste de avaliação do gnu m4

  • Freebsd setfacl

  • ps -vxa não classifica em relação à memória

  • FreeBSD's sh: funções de lista

Sidebar

Stats

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

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

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

    • 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

    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
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • 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
    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

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