Come faccio a cambiare il permesso di file per un determinato modello di file di sottocartelle della mia directory corrente?

StackOverflow https://stackoverflow.com/questions/4249878

Domanda

Utilizzando chmod, faccio chmod +x *.sh nella directory corrente, ma cosa succede se voglio cambiare tutti i file, inclusi i file all'interno di sottocartelle che ha un'estensione di file sh?.

chmod +x -R * funzionerà ma ho bisogno di qualcosa di più simile a chmod +x -R *.sh

È stato utile?

Soluzione

uso find:

find . -name "*.sh" -exec chmod +x {} \;

Altri suggerimenti

Provare a utilizzare la gloriosa combinazione di ritrovamento con xargs.

find . -iname \*.sh -print0 | xargs -r0 chmod +x

Il . è la directory per avviare in, in questo caso la directory di lavoro.

Con le versioni moderne di find , si ottengono i vantaggi di un approccio xargs che evita più chiamate al comando (chmod). Il comando è solo leggermente diversa.

find . -name "*.sh" -exec chmod +x {} +

find docs su Arch 2015/09/01 ( enfasi aggiunto da me):

  

-exec command {} +

     

Questa variante del ricorso -exec esegue il comando specificato sui file selezionati, ma la linea di comando è costruito aggiungendo ciascun nome di file selezionato alla fine; il numero totale di invocazioni del comando sarà molto inferiore al numero di file corrispondenti . La riga di comando è costruito nello stesso modo in cui xargs costruisce le sue linee di comando. Una sola istanza di {} è consentito all'interno del comando. Il comando viene eseguito nella directory di partenza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top