como posso recursivamente executar chmod -x?

0

Então, tenho minha coleção de músicas no meu servidor 12.04.2. Esta coleção viajou comigo ao longo dos anos a partir de uma máquina Windows para um MacBook Pro e, finalmente, para onde está hoje no servidor.

Tenho notado que, por algum motivo, todas as minhas 'folder.jpg' (fotos de capa) são destacadas em verde no terminal (sinalizando que são executáveis). se eu rodar chmod -x folder.jpg , o terminal irá mostrá-los em um roxo claro (sinalizando alguma forma de arquivo de mídia). Agora não estou preocupado com a cor, mas tenho duas perguntas. a) Por que meus .jpgs estão recebendo o bit executável? (Provavelmente, do Windows com eles, tenho certeza), eb) como eu posso recursivamente executar chmod -x *.jpg do topo da minha hierarquia musical?

Quando tento chmod -R -x *.jpg do nível superior, obtenho:

mediausr@MediaSRV:/space/music$ chmod -R -x *.jpg
chmod: cannot access '*.jpg': No such file or directory

Pergunta bônus: Todas as pastas são coloridas para 'outras graváveis', enquanto as novas pastas que eu crio são coloridas corretamente para 'diretório'. Eu não estou super preocupado com isso, já que isso não envolve coisas sendo executáveis, mas você sabe, se alguém puder me esclarecer de uma forma recursiva de fazer o sistema vê-las como diretórios diretos, isso seria incrível. : 0)

Obrigado por todos os seus comentários.

    
por Luis Flores III 01.08.2013 / 22:21

1 resposta

1

Você não é (bom) motivo para as imagens serem executáveis.

Basta executar este comando para corrigi-los:

find /space/music -name "*.jpg" -exec chmod -x {} +

Bônus:

find /space/music -type d -exec chmod o-w {} +

Explicação:

A maior parte da linha de comando é auto-explicativa. A única parte que precisa de algum insight é o final. {} é substituído pelo nome dos arquivos (resp direct directory) encontrados que correspondem ao filtro. Normalmente, o comando find é finalizado com um ponto-e-vírgula protegido \; .

No entanto, isso não é eficiente, pois o comando é executado uma vez para cada arquivo / diretório.

Existe uma solução bem conhecida que direciona find output para xargs , que concatena os nomes dos arquivos até a linha de comando máxima permitida, mas há um problema quando o caminho contém espaços, o que é cada vez mais comum no mundo Unix / Linux.

Mais uma vez, uma solução baseada em extensões específicas do GNU permite lidar adequadamente com esses casos. Eu escolho uma abordagem mais simples usando uma maneira POSIX (leitura portátil) para encontrar a criação de longas linhas de comando, ou seja, {} é substituído por um conjunto de nomes de arquivos até o número máximo permitido.

    
por jlliagre 01.08.2013 / 22:34