copie o arquivo e mantenha o caminho completo

1

Eu preciso copiar o arquivo para a pasta de destino com o caminho completo. Eu posso fazer isso no Linux (Red Hat / Centos) facilmente assim:

cp --parents /some/path/to/file /newdir

Então eu pego, no diretório de destino, algo assim:

/newdir/some/path/to/file

Eu precisaria exatamente do mesmo recurso no AIX 6.1. Eu tentei algumas coisas, mas ainda não consegui. Alguma idéia de comando prático para fazer o trabalho?

    
por Luke 20.06.2018 / 15:15

3 respostas

2

O utilitário cp nativo do AIX não inclua a opção --parent , como você descobriu.

Uma opção seria instalar e usar o rsync a partir do AIX Toolbox para aplicativos do Linux coleção de software. Você também precisa instalar o RPM popt (como uma dependência do rsync).

Então você pode executar:

rsync -R /some/path/to/file /newdir/

Para terminar com /newdir/some/path/to/file .

Como uma opção caseira, você poderia escrever uma função wrapper usando ksh93 (para o suporte à matriz) para emular o comportamento. Abaixo está uma função básica como exemplo; Ele supõe que você deseja copiar arquivos com caminhos relativos e não oferece suporte a nenhuma opção:

relcp() {
  typeset -a sources=()
  [ "$#" -lt 2 ] && return 1
  while [ "$#" -gt 1 ]
  do
    sources+=("$1")
    shift
  done
  destination=$1

  for s in "${sources[@]}"
  do
    if [ -d "$s" ]
    then
        printf "relcp: omitting directory '%s'\n" "$s"
        continue
    fi

    sdir=$(dirname "$s")
    if [ "$sdir" != "." ] && [ ! -d "$destination/$sdir" ]
    then
      mkdir -p "$destination/$sdir"
    fi
    cp "$s" "$destination/$sdir"
  done

  unset sources s sdir
}
    
por 20.06.2018 / 15:36
0

Você pode instalar o AixTools, um kit de ferramentas do gnu para o AIX. link

Que inclui o cp entre todas as outras ferramentas que você conhece e ama.

    
por 20.06.2018 / 15:45
0

Como um processo de duas etapas, crie primeiro o diretório de destino (se ainda não existir) e copie o arquivo (se o mkdir tiver sido bem-sucedido).

dir=/some/path/to
mkdir -p "/newdir/$dir" && cp "$dir/file" "/newdir/$dir"

Como uma função de shell (somente manipula a cópia de um único arquivo):

cp_parents () {
    source_pathname=$1
    target_topdir=$2

    mkdir -p "$target_topdir/${source_pathname%/*}" && cp "$source_pathname" "$target_topdir/$source_pathname"
}

Então,

$ cp_parents /some/path/to/file /newdir
    
por 20.06.2018 / 16:03