Come faccio a cambiare il permesso di file per un determinato modello di file di sottocartelle della mia directory corrente?
-
27-09-2019 - |
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
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 cuixargs
costruisce le sue linee di comando. Una sola istanza di{}
è consentito all'interno del comando. Il comando viene eseguito nella directory di partenza.