Como apenas compactar os arquivos de um usuário específico?

6

Eu gosto de zip, é simples, mas recentemente eu vim com a necessidade de zipar apenas o arquivo que pertence a um usuário em um diretório.

Eu li o manual e não consigo encontrar nenhuma opção para, por exemplo, fazer coisas como:

zip /tmp/file.zip -own antoine -r /usr/something/* 

Perdi a opção ou talvez seja possível com outro formato padrão de arquivamento (estou aberto à sugestão embora trabalhe no AIX e possa perder algumas opções ou binário)

    
por Kiwy 14.03.2014 / 16:37

4 respostas

11

Você pode tentar encontrar os arquivos relevantes com find :

find /usr/something -maxdepth 1 -user antoine

Você pode usar -exec para criar um arquivo zip com base nos resultados de find :

find /usr/something -maxdepth 1 -user antoine -exec zip /tmp/file.zip {} +

deixe de fora a maxdpthp se você quiser reciclar.

    
por 14.03.2014 / 16:52
6

com zsh :

zip mine.zip ./*(.U)

para zipar meus arquivos (regulares).

zip antoine.zip ./*(.u:antoine:)

para zip de antoine

    
por 14.03.2014 / 23:07
5

Usando apenas os recursos disponíveis no AIX ou em outros sistemas POSIX e quase nenhum:

find /usr/something/* /usr/something/.[!.]* /usr/something/..?* \
     -prune -type f -user antoine -exec zip -r /tmp/file.zip {} +

find recursa em subdiretórios. Para evitar isso, -prune diz para não descer nos diretórios que encontra. Isso não é bom se eu executar find /usr/something -type d -prune -o … , porque /usr/something será ignorado. Por isso, corro find em todas as entradas desse diretório, exceto . e .. .

Um idioma mais fácil é mudar para o diretório e tratar o diretório inicial . especialmente. Aqui, isso alteraria o archive resultante, que teria caminhos no formato ./foo em vez de usr/something/foo . Essa técnica depende do fato de que -name . corresponde apenas ao diretório inicial, todos os outros arquivos encontrados terão seu próprio nome.

cd /usr/something &&
find . ! -name . -prune -type f -user antoine -exec …

Observe que zip pode ser executado mais de uma vez se a lista de nomes de arquivos for muito longa para uma única chamada. Isso é ok porque zip -r substitui os arquivos existentes no arquivo; Se você usar outro arquivador, tome cuidado para não invocá-lo em um modo em que ele criaria um novo arquivamento (por exemplo, não use tar -c ).

    
por 14.03.2014 / 23:56
3

Que tal

find /usr/something -maxdepth 1 -user antoine | zip /tmp/file.zip -@
    
por 14.03.2014 / 20:29

Tags