"cp --parents" equivalente no Mac

"cp --parents" equivalente no Mac

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

cp --parents

No entanto, executar este mesmo comando no Mac no terminal gera 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 mantendo 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 cp --parentscomportamento?

Responder1

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

Você provavelmente pode obter a funcionalidade desejada instalando o GNU cpno seu Mac e usando-o. Provavelmente faz parte de um pacote GNU chamado fileutils, e você provavelmente pode instalá-lo com Homebrew, MacPorts ou Fink.

Responder2

Consegui sintetizar esse comando no MAC usando o parâmetro Rsync -R para copiar a estrutura de diretórios relativa do arquivo que 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 adicional ao usar RSYNC em vez de CP

Responder3

Você tem basename? Se for assim:

$ 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

informação relacionada