Risposte:
Questo fa quello che stai cercando:
find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
Questo utilizza find
piuttosto che ls
perché, in genere, l' analisi ls
dell'output non è affidabile . Questo modulo, find
tuttavia, funzionerà con nomi di file anche se contengono nuove righe o altri caratteri difficili.
Spiegazione
find . -maxdepth 1 -type f -print0
Questo seleziona i file. Questo può essere personalizzato usando una delle tante opzioni di find. L'opzione print0
dice find
di stampare i nomi dei file in un elenco separato da null. Questo è l'unico affidabile per trasmettere elenchi di nomi di file.
xargs -L1 -p0 chmod +x
Questo prende l'elenco separato da null di nomi di file generati da find
e applica loro il tuo comando.
L' -L1
opzione dice xargs
di lavorare su un solo nome di file alla volta. L' -p
opzione indica xargs
di richiedere l'approvazione prima di continuare. L' -0
opzione dice xargs
di usare il carattere null come delimitatore tra i nomi dei file.
[Non ero a conoscenza -p
dell'opzione xargs
fino a quando @kwan non l'ha sottolineato.]
find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.
Così funziona con la -maxdepth 1
prima della -type f
, come: find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
.
È possibile utilizzare xargs
.
per esempio:
ls|xargs -I path -p chmod +x path
Opzione -p
: chiedere all'utente se eseguire ciascuna riga di comando e leggere una riga dal terminale. Esegui la riga di comando solo se la risposta inizia con 'y' o 'Y'.
xargs -p
così tanto che lo copierò.
touch "a very long file name
e premi Invio. Vedi la continuazione della riga e digita semplicemente il preventivo di chiusura e premi di nuovo Invio. tadaa, newline nel nome file. Per pigrizia per riscrivere un lungo nome di file.
find
compatibile il comando POSIX utilizzando-exec printf '%s\0' {} +
. Tuttavia, non pensare che ci sia modo di rendere compatibile POSIX.