Eu tenho um diretório que contém arquivos e subdiretórios. Eu quero copiar arquivos apenas nos diretórios, então eu corro
cp -v src/* dst/
e obter erro cp: -r not specified; omitting directory
. Eu ficaria bem em ignorá-lo, mas o comando falhará se o -e
sinalizador bash estiver definido.
Como posso evitar minha falha de script, assumindo que NÃO quero copiar recursivamente e quero -e
sinalizar? A única coisa que consigo pensar é em usar find -type f -maxdepth... -exec cp...
, mas parece muito pesado. Alguma maneira mais simples?
ps Eu sei sobre -e
rochas de fundo, obrigado.
Uma técnica comum para
-e
definir em seu script, mas ainda ter comandos que você sabe que podem produzir erros, é torná-los parte de um comando condicional, por exemploEssa construção nunca produzirá um erro que faria com que o script fosse encerrado. Nenhuma programação sofisticada é necessária e é aplicável a muitos comandos, não apenas ao
cp
exemplo.Com "extended glob" (shopt -s extglob) ativado, use
src/!(*/)
para corresponder a todos os itens, exceto aqueles que corresponderemsrc/*/
(diretórios ou links simbólicos para diretórios).Outra maneira comum de copiar arquivos específicos é
cpio -p
,find src/ [...] | cpio -p dst/
.