Whitelist extensões de arquivos no diretório?

0

É possível colocar na lista de permissões extensões de arquivo específicas para pastas?

Por exemplo: eu gostaria de mover os álbuns de música para uma pasta, mas não quero que a capa seja transferida por não permitir * .png, * .jpg, etc., ...

    
por Kalim 19.09.2018 / 23:06

3 respostas

0

Você pode fazer a filtragem na cópia, digamos, no script de cópia. Ou você pode aplicar o filtro após a operação de cópia, removendo o que não é permitido ou necessário.

    
por 19.09.2018 / 23:12
0

A questão é certamente mais ampla do que a questão, portanto a resposta pode variar.

Originalmente, sistemas semelhantes ao Unix não conhecem o conceito de extensão de arquivo, embora alguns softwares possam identificar extensões para adaptar suas operações.

Além disso, uma expansão de nome de caminho deve corresponder a arquivos ou diretórios existentes localizados em um nível especificado no sistema de arquivos (sistema de arquivos hierárquico).

mv pode mover uma hierarquia de diretórios inteira, portanto, mv também move arquivos localizados em diretórios correspondentes, indistintamente.

Uma solução simples é remover a permissão de leitura nos arquivos desejados para impedir que eles sejam copiados.

prompt% cp -vr album /tmp
'album/' -> '/tmp/album'
'album/song.mp3' -> '/tmp/album/song.mp3'
'album/covert.png' -> '/tmp/album/covert.png'
 cp: cannot open 'album/covert.png' for reading: Permission denied
prompt% ls -l album/covert.png
--w-r--r-- user user 8 Sep 07:27 album/covert.png 

Os arquivos são transferidos no diretório de destino, exceto os arquivos protegidos para leitura.

    
por 20.09.2018 / 16:39
0

A maneira ingênua de resolver isso é copiar tudo e excluir o arquivo que você não deseja.

Usando rsync para copiar toda a estrutura de diretório source para target , então find para excluir os arquivos que você não deseja de target :

rsync -a source/ target

find target -type f \( -name '*.jpg' -o -name '*.png' \) -delete

Uma maneira mais simplificada de fazer isso é usar os recursos de filtragem de rsync para não transferir os arquivos que você não deseja:

rsync -a --exclude='*.png' --exclude='*.jpg' source/ target

Em ambos os casos, talvez você queira adicionar --delete e / ou --delete-excluded à invocação rsync se quiser excluir arquivos que não estão presentes no diretório de origem (se target já contiver material e você quer que os dois diretórios sejam idênticos para além dos arquivos de imagem).

    
por 21.09.2018 / 11:19