Ik wil de betekenis weten van {} + in de exec commando, en wat is het verschil tussen {} + en {} \;. Om precies te zijn, wat is het verschil tussen deze twee:

find . -type f -exec chmod 775 {} + find . -type f -exec chmod 775 {} \; 

Reacties

  • Het wordt beschreven in man find(1) in detail, gemakkelijk te vinden door iedereen. Don ' wees niet lui.
  • Bedankt beste Miroslav, ik zocht in man exec!
  • Ah, ik was het gebruik van {} + nog nooit eerder tegengekomen. Ik gebruik daarvoor normaal xargs (en vaak find ... -print0 | xargs -0 ...)

Answer

Het gebruik van ; (puntkomma) of + (plusteken) is verplicht om de shell-opdrachten te beëindigen die worden aangeroepen door -exec / execdir.

Het verschil tussen ; (puntkomma) of + (plusteken) is hoe de argumenten worden doorgegeven aan find “s -exec / -execdir parameter. Bijvoorbeeld:

  • door ; te gebruiken, worden meerdere opdrachten uitgevoerd (afzonderlijk voor elk argument),

    Voorbeeld:

    $ find /etc/rc* -exec echo Arg: {} ";" Arg: /etc/rc.common Arg: /etc/rc.common~previous Arg: /etc/rc.local Arg: /etc/rc.netboot 

    Alle volgende argumenten voor find worden beschouwd als argumenten voor het commando.

    De string {} wordt vervangen door de huidige bestandsnaam e wordt verwerkt.

  • met + zal de minst mogelijke commandos uitvoeren (aangezien de argumenten samen worden gecombineerd). Het lijkt erg op hoe het xargs commando werkt, dus het zal zoveel mogelijk argumenten per commando gebruiken om te voorkomen dat het maximum aantal argumenten per regel wordt overschreden.

    Voorbeeld:

    $ find /etc/rc* -exec echo Arg: {} "+" Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot 

    De opdrachtregel wordt opgebouwd door elke geselecteerde bestandsnaam aan het einde toe te voegen.

    Slechts één instantie van {} is toegestaan binnen het commando.

Zie ook:

Reacties

Antwoord

Gezien het feit dat de commando find krijgt onder drie bestanden:

fileA fileB fileC 

Als je -exec gebruikt met een plus (+) teken,

find . -type f -exec chmod 775 {} + 

het zal zijn:

chmod 775 fileA fileB fileC 

De opdrachtregel wordt opgebouwd door elke overeenkomende bestandsnaam aan het einde toe te voegen, op dezelfde manier waarop xargs de opdrachtregels bouwt. Het totale aantal aanroepen van het commando (chmod, in dit geval) zal veel minder zijn dan het aantal overeenkomende bestanden.

Als u -exec gebruikt met een puntkomma (;),

find . -type f -exec chmod 775 {} \; 

het zal zijn:

chmod 775 fileA chmod 775 fileB chmod 775 fileC 

Antwoord

Volgens man find:

-exec commando {} + Dit variant van de -exec-actie voert de opgegeven opdracht uit op de geselecteerde bestanden, maar de opdrachtregel wordt opgebouwd door elke geselecteerde bestandsnaam aan het einde toe te voegen; het totale aantal aanroepen van de opdracht zal veel minder zijn dan het aantal overeenkomende bestanden. De opdrachtregel is op vrijwel dezelfde manier gebouwd als xargs de opdrachtregels bouwt. Slechts één exemplaar van ‘{}’ is toegestaan binnen de opdracht. De opdracht wordt uitgevoerd in de startmap.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *