Definir permissões corretas automaticamente para determinado tipo de arquivo quando o arquivo é copiado do sistema de arquivos não-Linux

3

A principal razão pela qual eu quero isso é meu uso pesado de dircolors , especialmente para ls --color=auto . Por exemplo, sempre que um arquivo .mp3 for copiado do NTFS, ele terá permissões definidas por umask 022 , que deve ser o valor padrão na maioria das distribuições modernas. No entanto, para arquivos de áudio, não faz sentido: devido ao fato de suas permissões serem definidas como 755 ( rwxr-xr-x ), elas obterão a mesma cor que um script de shell executável , enquanto eu Eu realmente gostaria de ter essa cor reservada para verdadeiros executáveis. Isto não é Windows; mesmo com a permissão x definida para proprietário / grupo / outro, você não pode esperar que ./track1.mp3 trabalhe no terminal para que ele tente escolher um player de console padrão.

Então, eu gostaria de ter um certo umask SOMENTE para arquivos de áudio , i. e. que quaisquer arquivos como .mp3, .wav, .ogg e assim por diante sempre seriam configurados como 644 , enquanto todos os outros arquivos copiados para esse local são assumidos como padrão umask of 022 .

Existe alguma maneira de fazer isso?
(NOTA: cp --preserve NÃO preservará as permissões originais no NTFS, uma vez que o NTFS é notoriamente ignorante sobre a sistemática da permissão * NIX).

    
por syntaxerror 23.03.2015 / 18:09

2 respostas

2

Eu usaria a ferramenta de instalação para copiar do NTFS.

install -m644 file1 ... fileN destination_directory
    
por 23.03.2015 / 18:33
3

Você pode usar um script para o seu próprio comando cp definido pelo usuário que verifica as extensões de arquivo e usa chmod apropriadamente ...

Você poderia fazer algo simples como: (usando install em vez de cp chmod como por @ fd0. Isso é mais inteligente de qualquer maneira.)

#!/bin/bash

args=("$@")
dest="${args[@]:(-1)}"
unset args[${#args[@]}-1]

if [ ! -d "$dest" ]; then
    echo "Please specify a destination directory as the final argument."
    exit 1
fi

for file in "${args[@]}"; do
    if [ "$file" == *".mp3" ] || [ "$file" == *".wav" ] || [ "$file" == *".ogg" ];  then
        install -m644 "$file" "$dest"
    else
        install -m755 "$file" "$dest"
    fi
done

exit 0
    
por 23.03.2015 / 18:33