Existe uma opção --parents para mv like for cp?

2

cp tem um recurso útil --parents que permite que a estrutura de diretório de um arquivo seja copiada para outro diretório:

$ cp -v --parents source/directory/from target/
‘source/directory/from’ -> ‘target/source/directory/from’

Como faço da mesma forma mover um arquivo?

    
por Flimm 22.10.2013 / 17:34

2 respostas

3

Não diretamente, pelo menos não para o GNU mv de acordo com sua página do manual . Uma solução possível seria adicionar uma função como esta:

pmv(){
    source=$1;
    target=$2;
    mkdir -p "$target"/"$(dirname $source)"
    mv "$source" "$target"/"$(dirname $source)"/
}

Adicione essa função ao arquivo de configuração do seu shell ( ~/.bashrc se você estiver usando o bash) e execute-o assim:

pmv source/directory/from target/
    
por 22.10.2013 / 18:00
2

Is there a way to move a file in a similar fashion?

Nenhum . mv é uma utilidade bastante simples que usa a chamada do sistema rename (operação atômica FS) se possível - quando a origem / destino estão no mesmo dispositivo de bloco, caso contrário ele cai para cp de comportamento. Na verdade, rename falharia mesmo se src / dst fosse o mesmo dispositivo montado em diferentes pontos de montagem que o Linux permite.

Então, quando você precisar mover arquivos como:

cp -v --parents source/directory/from target/

você pode pensar em:

mv source target/

mas tenha em mente que isso moveria todo o conteúdo para todos os pais, dentro do caminho, então você precisaria lidar com isso mais tarde - quero dizer, desvincular todos os extras arquivos se você precisar ter o mesmo resultado que o cp --parents forneceria.

Mais cedo ou mais tarde você perceberia que o que você está fazendo poderia ser facilmente alcançado com a abordagem cp / rm . E o cp do -l pode ser usado para que ele funcione rápido, permitindo usar o amado --parents . Essa é a razão pela qual mv não teria nada tão extravagante como cp ' --parents .

    
por 22.10.2013 / 19:21