Estou executando um comando a partir de um script como
tar -c -f ar.tar a b c d
onde b, c e d podem não existir e podem ser diretórios. As soluções apresentadas são canalizar a saída de ls -d
para grep
, em seguida, uni-la ao tar
comando ou ativar globs estendidos para @(a|b|c|d)
.
Existe uma maneira mais clara de fazer isso? Estou no Debian Wheezy, que parece não ter um --include
parâmetro.
--ignore-failed-read
opção?Respostas:
podes tentar
Onde
c
para criarf ar.tar
especificar arquivo tar$(ls a b c d)
listará no stdin qual arquivo está realmente presente (e dará erro para outro)fonte
tar cf ar.tar $(ls -d a b c d 2>/dev/null)
funciona perfeitamente .. mas eu acho que é mais limpo com extglobextglob
- Eu estou usando o código no meu comentário acimaSe não há problema em ter o caminho completo dos arquivos no arquivo tar, você pode:
A
-e
opção de readlink canonizará os nomes de arquivos existentes e ignorará silenciosamente outros.fonte
--strip-components
estiver extraindo.Usar
Explicação
find
faz recursão.-o
significa-or
. Portanto, acima significa procurar esse curinga OU esse. Se você tiver apenas um padrão, não será necessário-o
.fonte