Muitas vezes acontece que eu quero aplicar uma operação recursivamente. Alguns comandos, como grep, usam r minúsculo para indicar recursão. Por exemplo
grep -r foo .
Outros comandos parecem preferir um R maiúsculo:
chmod -R 755 .
Estou constantemente entendendo isso errado e esquecendo qual é qual. Existe alguma lógica por trás da seleção de argumentos para esses argumentos?
--recursive
, é provável que eles não façam a coisa errada.-r
os meios para remover o bit de leitura para todos os níveisRespostas:
A maioria dos comandos POSIX que têm opção de passagem de diretório recursiva (
ls
,chmod
,chgrp
,chmod
,cp
,rm
) tem-R
para isso.rm
também tem,-r
porque era o que era inicialmente, muito antes do POSIX.Agora, o comportamento varia quando são encontrados links simbólicos ao andar pela árvore. O POSIX tentou tornar as coisas consistentes adicionando as opções
-L
/-H
/P
para dar ao usuário a chance de decidir o que fazer com os links simbólicos, deixando o padrão quando nenhum é fornecido não especificado.O POSIX
grep
não possui-r
ou-R
.O GNU
grep
inicialmente não tinha nenhum.-r
foi adicionado em 1998. Isso seguia os links simbólicos.-R
foi adicionado como sinônimo em 2001 por consistência com os outros utilitários. Isso ainda estava seguindo links simbólicos.Em 2012 (grep 2,12),
-r
foi alterado para que ele não seguiu links simbólicos, possivelmente porque-L
,-H
já foram utilizados para outra coisa.Os BSDs
grep
foram baseados no GNU grep por um longo tempo. Alguns deles reescreveram seus próprios e mantiveram mais ou menos compatibilidade com o GNUgrep
. O Apple OS / X abordou o problema do link simbólico de maneira diferente.-r
e-R
são iguais e não seguem links simbólicos. No-S
entanto, existe uma opção que funciona como a opçãochmod
/cp
/ para seguir links simbólicos.find
-L
fonte
rm
tinha uma opção recursiva diante dos demais. Foi-r
. Entãocp
ganhou uma correspondência-r
. Em seguida,ls
queria ter uma opção recursiva, masls -r
já significava "classificação inversa", por isso tinha que ser-R
. Lá a tensão entre-R
e-r
começou.-R
era o único que podia ser adicionado consistentemente a todos os utilitários relevantes, masrm -r
já era o uso tradicional bem conhecido. Então o GNU apareceu e disse: "consistência e tradição são para quadrados, cara!"Nenhuma. Depende simplesmente do que os desenvolvedores escolheram. Geralmente é porque ambos
-r
e-R
são opções válidas. Nos programas que você citou, por exemplo:versões recentes do GNU
grep
:chmod
não tem-r
opção, presumivelmente, os desenvolvedores preferem-R
. No entanto,-r
é claro, é uma sequência de permissões válida (como apontado por @Arkadiusz Drabczykso), portanto, não pode realmente ser usada lá.fonte
grep
versão? GNU grep 2.12-r
e-R
são os mesmos. Com chmod,-R
é definido pelo POSIX.grep (GNU grep) 2.15
e lembro de ter visto isso nas versões anteriores. Tem certeza de que não é o seu caso? Eles fornecem essencialmente os mesmos resultados na maioria dos casos, eles só se comportam de maneira diferente com links. Quantochmod
, pode muito bem ser definido pela POSIX, mas que ainda é, provavelmente, porque os originaischmod
devs escolheuR
maisr
.-r
pois essa já é uma sequência de permissões válida.Principalmente, tudo se resume a uma preferência pessoal do desenvolvedor. Às vezes, no entanto, uma opção em maiúscula é escolhida se uma opção preferida em minúscula for usada para outra coisa que os desenvolvedores acreditam ser mais importante do que, por exemplo, operar recursivamente. No caso de chmod,
-r
é um modo válido. Por exemplo:fonte
Sempre que possível, use as versões GNU desses utilitários e, em seguida, use os nomes mais longos para as opções.
Não.
Ou não muito. Os utilitários Unix foram desenvolvidos aos poucos e as opções de comando refletem as escolhas individuais de seus principais ou únicos desenvolvedores. Existem apenas 26 letras de opção em minúsculas ASCII disponíveis, que é o conjunto preferido (os comandos geralmente estão em minúsculas para facilitar a digitação), e esse conjunto limitado leva a conflitos mnemônicos. Os conflitos levam à inconsistência, à medida que novas versões de comandos / utilitários ganham novos recursos .
fonte
Há 20 anos, quando eu aprendi o UNIX, meu mentor me disse assim: "É melhor você sempre digitar a opção recursiva em R maiúsculo. Como alguns comandos têm um significado diferente na opção r em minúscula, mas o R em maiúscula funciona principalmente como opção recursiva E você terá um bom hábito de ser cauteloso ao pressionar [rm * -Rf] ao pressionar a tecla Shift ao digitar R. "
fonte