Da maneira como os sistemas de arquivos funcionam, um diretório não é realmente uma pasta que contém arquivos, mas um diretório é um arquivo que contém ponteiros de inode para arquivos “filhos” conectados a ele. Ou seja, da perspectiva do sistema de arquivos, um arquivo é um arquivo, mas um diretório é apenas um arquivo que contém a lista de arquivos conectados.
Portanto, da perspectiva da linha de comando, faça o seguinte:
$ cp dir1 copyDir1
Basicamente, significa copiar o arquivo nomeado, dir1
para um novo arquivo nomeado copyDir1
. E, no que diz respeito ao sistema de arquivos, dir1
é apenas um arquivo; o fato de ser um "diretório" só será aparente quando o sistema de arquivos realmente verificar dir1
para ver o que realmente é essa pilha de bits.
O -r
sinalizador diz ao sistema de arquivos para rolar recursivamente a árvore de arquivos / diretórios e copiar todo e qualquer conteúdo que possa ser um "filho" desse arquivo para um novo local.
Agora, por que isso pode parecer supérfluo ou redundante, isso realmente se resume a métodos históricos de lidar com sistemas de arquivos. Além de criar um sistema seguro contra todos os tipos de erros relacionados ao usuário; acidental e intencional.
Ou seja, digamos que você tenha um ~/bin
arquivo em seu diretório pessoal que deseja copiar, mas que acidentalmente tenha deixado de lado, ~
porque você é humano e comete erros, então é assim /bin
:
cp /bin/ ~/copy_of_bin
Com a “rede de segurança” de /bin
ser um diretório combinado com a necessidade do -r
sinalizador, você evitará copiar acidentalmente toda a raiz binária do sistema em que está no diretório inicial. Se essa rede de segurança não existisse, um desastre menor - ou possivelmente maior - aconteceria.
A lógica aqui é que nos dias anteriores às convenções lógicas / comportamentais pré-GUI (interfaces gráficas com o usuário) precisam ser definidas para evitar que o usuário crie contratempos que possam potencialmente matar um sistema. E usar a -r
bandeira agora é um deles.
Se isso parecer supérfluo, não será necessário procurar o sistema GUI moderno acima dos sistemas de arquivos Linux. Uma GUI soluciona problemas básicos do usuário como esse, permitindo arrastar e soltar arquivos e diretórios com facilidade.
Porém, no caso das interfaces baseadas em texto, grande parte da “experiência do usuário” nesse mundo é basicamente apenas obstáculos econômicos e lógicos que ajudam a manter o usuário sob controle para evitar possíveis desastres.
Da mesma forma, é por isso que os sistemas de arquivos Linux / Unix não têm 777
permissões e sudo
direitos definidos por padrão e como administradores de sistema reais estremecem quando um usuário define 777
permissões ou concede sudo
direitos a todos . Essas são as coisas básicas que se faz para garantir que o sistema seja estável e o mais "à prova do usuário" possível; qualquer um que se apresse em dar um curto-circuito nessas convenções provavelmente causará danos ao sistema sem nem mesmo saber.
INFORMAÇÕES ADICIONAIS: Outra resposta aqui no site do Unix Stack Exchange fornece uma boa explicação de por que uma cópia não recursiva de um diretório é problemática; ênfase é minha.
Bem, sem o sinalizador -R, só é possível copiar arquivos, porque é bastante incomum que alguém queira copiar um diretório de forma não recursiva : uma cópia não recursiva resultaria apenas em um segundo nome para o diretório, apontando diretamente para o diretório mesma estrutura de diretórios.
Como isso raramente é o que as pessoas querem e, na verdade, existe um programa separado que faz isso (ln), uma cópia não recursiva dos diretórios não é permitida.
Portanto, se um diretório é realmente um arquivo com itens de inode, fazer uma cópia direta desse arquivo seria apenas o equivalente a como um link físico funcionaria. O que não é o que alguém quer.