Um diretório é (conceitualmente) um "arquivo" especial que contém uma lista de nomes e os números dos inodes para os quais esses nomes apontam. Alguns dos nomes podem ser subdiretórios. Há uma entrada especial ..que aponta para o diretório pai.
Portanto, é claro, é fácil alterar o nome de um arquivo: basta alterar o nome na entrada do diretório, nada mais. Isso mantém se o arquivo é realmente um arquivo ou é um "arquivo" usado para armazenar o conteúdo de outro diretório. De fato, o mesmo renamesyscall faz as duas coisas.
Copiar, no entanto, é uma operação muito menos trivial. Você pode simplesmente copiar o diretório "arquivo", mas então você tem dois diretórios onde os arquivos são os mesmos (seriam links físicos). Se você tivesse um sistema que permita links diretos para diretórios, seria o caso, mas como nenhum sistema moderno permite isso, pelo menos para não-root, é necessário fazer essa cópia para cada subdiretório. Você pode realmente solicitar cpesse comportamento com cp -lR: -lpara link -Rfísico , para essa recursão.
Mas deixar tudo vinculado provavelmente não é o que você deseja. Em vez disso, você deseja cpcopiar cada arquivo. Essa é uma operação bastante cara: cada arquivo deve ser lido na memória e gravado novamente em disco em um segundo local. Na verdade, são necessários vários syscalls para abrir, ler, gravar e fechar os arquivos, e isso deve ser repetido para cada arquivo.
Os sistemas de arquivos tradicionais também funcionam dessa maneira no disco. Não há como copiar um monte de arquivos, além de examiná-los individualmente e copiá-los, e esses são os tipos de sistemas de arquivos que estavam em uso quando os utilitários básicos da linha de comando foram projetados.
mvpassando de um sistema de arquivos para outro o mesmo "basta alterar o nome na entrada do diretório"?