Você pode fazer isso, para fornecer taruma lista de todos os arquivos, protTestsexceto aqueles que são links simbólicos:
find protTests -maxdepth 1 -mindepth 1 -not -type l -print0 |
tar --null --files-from - -cvf protTests.tar
A propósito, seu comando existente:
tar -cvf protTests.tar protTests/*
não arquivará todos os arquivos protTests, apenas arquivará aqueles cujos nomes não começam .(aqueles que não estão ocultos). O *operador glob ignora arquivos cujos nomes começam .por design. O comando também tem o problema de que, se protTestshouver muitos arquivos (mais de muitos milhares), ele protTests/*poderá se expandir para muitos argumentos para caber na linha de comando.
Um comando mais simples como esse não teria nenhum desses problemas:
O Tar não tem opção --files-from, esta é uma opção da gtar; portanto, dê um conselho, mencione melhor que isso é específico da gtar. O Find não tem primário -not, esse é outro GNUism não portátil. Em geral, é uma má idéia usar uma chamada de localização separada. Isso pode causar problemas com caracteres engraçados no nome do arquivo e, definitivamente, apresenta um baixo desempenho, pois o find e o tar precisam verificar o sistema de arquivos. Esses problemas não se aplicam a programas como o star que usam libfind e, portanto, têm o código de busca incorporado.
schily
Deixe-me adicionar outra dica geral: ao fornecer um aviso específico para uma variante específica de um programa UNIX de um fornecedor, é uma boa prática mencionar o fornecedor e que ele é específico. Isso geralmente pode ser feito usando os nomes oficiais do software, por exemplo, gtar em vez de tar, vim em vez de vi. Observe que esta é uma plataforma de informações relacionada ao UNIX, portanto, em geral, os exemplos devem estar alinhados com o padrão POSIX.
schily
Você está certo, @schily, esta é uma solução específica do GNU. Sua resposta staré uma boa alternativa e eu a votei por esse motivo. Também concordo com a objeção de "personagens engraçados", mas como o GNU tarnão tem uma -0opção, é uma troca. Eu não concordo com a objeção de desempenho, isso realmente não tem conseqüências nesta situação.
Celada
2
@schily, ambos GNU tare bsdtarhave --files-frome --nullque remove o problema com personagens engraçados (se combinados com find's -print0ou -exec printf '%s\0' {} +). Mas aqui, você provavelmente desejaria adicionar a --no-recursionopção. Algumas paximplementações também têm uma -0opção.
Stéphane Chazelas
2
@ Schily Eu sinto que este tópico de comentário não é o lugar para advocacy para diferentes versões do tar. Por favor, leve-o para conversar . Já é muito longo e parece uma guerra religiosa. A menos que o OP esteja em sintonia neste momento, acho que não importa qual versão tarestá em uso. Nem sabemos que tipo de Unix eles estão usando.
zsh: command not found: starQuando você mencionar utilitários que você sabe que> 99% dos seus leitores não terão em seus sistemas, explique onde obtê-los. E você deve divulgar sua afiliação quando mencionar seu próprio produto (se você publica o link ou não, para que você também publique o link).
Gilles 'SO- stop be evil
Atualmente, um sistema Linux típico perde muitos softwares importantes após uma instalação padrão e, ao mesmo tempo, muitos softwares inúteis são instalados. Um usuário do Linux deve saber como instalar o software ausente e as pessoas que usam frequentemente o tar geralmente têm o star instalado de qualquer maneira.
schily
8
A grande maioria das pessoas que costuma usar alcatrão nunca ouviu falar de pax, muito menos de estrelar.
Gilles 'SO- stop be evil' em
Bem, aquelas pessoas que não sabem que estão usando gtar no Linux quando chamam "tar" provavelmente não são as pessoas que se importam. Star é a mais antiga implementação de alcatrão livre e muitos recursos vistos em várias implementações de alcatrão foram retirados da estrela, então por que não falar sobre o original?
--files-from
, esta é uma opção da gtar; portanto, dê um conselho, mencione melhor que isso é específico da gtar. O Find não tem primário-not
, esse é outro GNUism não portátil. Em geral, é uma má idéia usar uma chamada de localização separada. Isso pode causar problemas com caracteres engraçados no nome do arquivo e, definitivamente, apresenta um baixo desempenho, pois o find e o tar precisam verificar o sistema de arquivos. Esses problemas não se aplicam a programas como o star que usam libfind e, portanto, têm o código de busca incorporado.star
é uma boa alternativa e eu a votei por esse motivo. Também concordo com a objeção de "personagens engraçados", mas como o GNUtar
não tem uma-0
opção, é uma troca. Eu não concordo com a objeção de desempenho, isso realmente não tem conseqüências nesta situação.tar
ebsdtar
have--files-from
e--null
que remove o problema com personagens engraçados (se combinados comfind
's-print0
ou-exec printf '%s\0' {} +
). Mas aqui, você provavelmente desejaria adicionar a--no-recursion
opção. Algumaspax
implementações também têm uma-0
opção.tar
. Por favor, leve-o para conversar . Já é muito longo e parece uma guerra religiosa. A menos que o OP esteja em sintonia neste momento, acho que não importa qual versãotar
está em uso. Nem sabemos que tipo de Unix eles estão usando.Minha implementação de tar é o melhor método
fonte
zsh: command not found: star
Quando você mencionar utilitários que você sabe que> 99% dos seus leitores não terão em seus sistemas, explique onde obtê-los. E você deve divulgar sua afiliação quando mencionar seu próprio produto (se você publica o link ou não, para que você também publique o link).