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 --parents
comportamento?
Responder1
--parents
é provavelmente um comportamento não POSIX específico para GNU cp
, enquanto o derivado do BSD cp
no OS X não o possui.
Você provavelmente pode obter a funcionalidade desejada instalando o GNU cp
no 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