Substituição de comandos / divisão de palavras dentro de du

1

Eu gostaria de calcular o tamanho de uma árvore de diretórios que eu vou compactar para arquivar. Eu não posso para a vida de mim descobrir / sentir como a divisão de palavras ou a substituição de comandos (que eu tentei usar para remediar o problema) no bash está funcionando.

Eu quero excluir vários diretórios. Eu coloco os argumentos, que também serão passados para o tar da mesma maneira, em uma variável:

exclude_opts="--exclude='VirtualBox VMs/Windows 7/*'  
--exclude='Software/*'  
--exclude='LSTC/*'"

Eu então faço referência a isso na minha ligação para du

$ du -sb $HOME $exclude_opts

38711578819 /home/patrick  
du: cannot access 'VMs/Windows': No such file or directory  
du: cannot access '7/*"': No such file or directory  
38711578819 total

ok; $exclude_opts está sendo dividido por algum motivo. Como faço para corrigir isso? Todas as minhas tentativas falharam.

Eu gostaria de fazer isso dentro do mesmo arquivo; não --exclude-from

    
por Patrick 28.02.2012 / 21:06

2 respostas

1

Você realmente precisa usar arrays ao coletar argumentos como este. Arrays tratarão os espaços em branco corretamente:

Atualização: removendo as aspas simples e "/ *" das opções de exclusão

exclude_opts=(
  "--exclude=VirtualBox VMs/Windows 7"
  "--exclude=Software"
  "--exclude=LSTC"
)

du -sb "$HOME" "${exclude_opts[@]}"
    
por 28.02.2012 / 22:03
0

Eu tentei simular sua situação e descobri que os seguintes trabalhos:

--exclude="Windows 7"

Estes não funcionam:

--exclude='Windows 7/*'
--exclude='VirtualBox VMs/Windows 7/*'

Basicamente, funciona se eu incluir apenas o diretório imediato, sem curinga. Meu sistema é um servidor Linux com a versão 2.6.9 do kernel.

    
por 28.02.2012 / 22:05

Tags