Pode-se mover um relpath em um comando?

1

Esta questão é semelhante a uma que pedi recentemente, mas as respostas a essa pergunta, para a maioria parte, não se estende a este, AFAICT. A principal diferença entre as duas perguntas é que a primeira foi sobre copiar, enquanto esta é sobre mover-se. Além disso, essa pergunta anterior era desnecessariamente específica, referindo-se ao caminho relativo para um arquivo . Nesta pergunta eu removi essa superespecificidade.

Eu me vejo fazendo isso com frequência suficiente para me perguntar se existe uma maneira padrão do Unix de fazer isso:

% mkdir -p /TARGETDIR/relative/path/to
% mv ./relative/path/to/x /TARGETDIR/relative/path/to

Em outras palavras, não quero mover apenas somefile para /TARGETDIR , mas, na verdade, quero "mover" (por assim dizer) todo o caminho relativo .

Eu sei que posso escrever uma função de shell ou um script para obter o mesmo efeito, mas gostaria de saber se já existe uma maneira de fazer isso com um único comando?

    
por kjo 06.03.2013 / 15:49

1 resposta

1

O Rsync poderia fazer isso:

rsync -R --remove-source-files a/b/c/d /TARGETDIR/

Mas estritamente falando, é mais uma cópia do que uma renomeação.

uma função é simples:

mkmv() {
  mkdir -p -- "$2/$(dirname -- $1)" && mv -- "$1" "$2/$1"
}

e provavelmente mais eficientemente (embora rsync tenha mais algumas opções que permitem copiar permissões ou outros atributos dos arquivos ou diretórios).

    
por 07.03.2013 / 01:15