“cp --parents” equivalente no Mac

2

O tópico explica isso - basicamente eu tenho um script bash usado em um sistema Linux e um sistema Windows com o Cygwin onde o seguinte comando funciona perfeitamente:

cp --parents

No entanto, a execução desse mesmo comando no Mac no terminal fornece o seguinte erro:

cp: illegal option -- -
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
       cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory

Estou usando o comando neste contexto copiando uma lista selecionada de arquivos em um diretório de saída e retendo sua estrutura de diretórios:

cp --parents foo/gen1.file foo/bar/gen2.file foo/gen3.bar bar/foo/bar.file ~/my-output/

O que posso fazer para obter o comportamento cp --parents ?

    
por udjamaflip 06.12.2013 / 03:12

3 respostas

1

Eu consegui sintetizar este comando no MAC usando o parâmetro Rsync -R para copiar a estrutura de diretórios relativa do arquivo que eu estava copiando.

Sintaxe:

rsync -R <list of files to copy> <target dir>

Uso:

rsync -R foo/gen1.file foo/bar/gen2.file foo/gen3.bar bar/foo/bar.file ~/my-output/

Isso obtém o mesmo resultado, embora eu tenha certeza de que provavelmente há um pouco de sobrecarga adicionada ao uso de RSYNC em vez de CP

    
por 24.03.2014 / 23:28
0

--parents é provavelmente um comportamento não-POSIX específico para o GNU cp , enquanto o cp derivado do BSD no OS X não o possui.

Provavelmente você pode obter a funcionalidade que deseja instalando o GNU cp no seu Mac e usando-o. É provavelmente parte de um pacote GNU chamado fileutils , e você provavelmente pode instalá-lo com Homebrew, MacPorts ou Fink.

    
por 06.12.2013 / 05:59
0

Você tem basename ? Em caso afirmativo:

$ for i in 'ls foo/gen1.file foo/bar/gen2.file foo/gen3.bar bar/foo/bar.file'; do cp $i ~/my-output/'basename $i'; done
    
por 19.03.2014 / 13:13