Copie todos os arquivos com uma certa extensão (recursiva)

0

Eu preciso de um script (pode ser bash, ksh ou qualquer outro) que copie, para fins de backup, todos os subdiretórios e arquivos de um diretório: .znc - mas arquivos .log.

A estrutura é assim:

.znc/users
.znc/users/username/moddata/
.znc/users/username/moddata/log
.znc/users/username/moddata/log/files.log
.znc/users/username2/moddata/
.znc/users/username2/moddata/log
.znc/users/username2/moddata/log/files.log

Note que isso é apenas parte da estrutura, mas essa é a parte com a qual estou tendo problemas.

Eu preciso copiar todo o conteúdo de .znc / mas arquivos cuja extensão é "log". Não consegui fazer muito com find ou grep , porque existe uma variável, nome de usuário.

    
por user139944 13.06.2012 / 20:11

2 respostas

1

Você pode usar o rsync . Ele também tem o recurso interessante que preserva o proprietário / grupo / perms etc

rsync -avi --exclude '*.log' .znc/ /path/to/destination/directory/
    
por 13.06.2012 / 20:21
1

Fora do topo da minha cabeça:

cd /to/top/of/dir/structure
tar -cvf /path/to/tarfile.tar $(find . -type f ! -name '*.log')

Isso não funcionará se os arquivos tiverem espaços.

Isso pode funcionar se os nomes dos arquivos tiverem espaços

cd /to/top/of/dir/structure
tar -cf /path/to/tarfile.tar --files-from /dev/null # trick to create empty tar file
find . -type f ! -name '*.log' -print0 | xargs -0 tar -uvf /path/to/tarfile.tar
    
por 13.06.2012 / 20:25

Tags