Se il file non è troppo grande e tutti i file sono ben nominato (senza spazi o altri caratteri speciali come virgolette), si potrebbe semplicemente:
chmod 755 $(<file.txt)
Se si dispone di caratteri speciali e/o molte linee in file.txt
.
xargs -0 chmod 755 < <(tr \\n \\0 <file.txt)
se il comando deve essere eseguito esattamente 1 ora da ingresso:
xargs -0 -n 1 chmod 755 < <(tr \\n \\0 <file.txt)
Questo non è necessario per questo campione, come chmod
accetta più file come argomento, ma questa partita il titolo di domanda .
Per qualche caso particolare, si potrebbe anche definire la posizione del file come argomento in comandi generateds da xargs
:
xargs -0 -I '{}' -n 1 myWrapper -arg1 -file='{}' wrapCmd < <(tr \\n \\0 <file.txt)
fonte
2012-12-18 20:46:22
Come 'xargs' è stato creato inizialmente per rispondere a questo tipo di necessità, alcune funzionalità, come * building command il più a lungo possibile nell'ambiente corrente * per richiamare 'chmod' in questo caso il meno possibile, riducendo * i fork * assicurano l'efficienza. 'while; do..done <$ file' implie esegue 1 fork per 1 file. 'xargs' potrebbe eseguire 1 fork per migliaia di file ... in maniera affidabile. –
perché il terzo comando non funziona in un makefile? sto ricevendo "errore di sintassi vicino a un token imprevisto" <"", ma l'esecuzione direttamente dalla riga di comando funziona. –
Questo sembra collegato alla sintassi specifica del Makefile. Si potrebbe provare a invertire la riga di comando: 'cat file.txt | tr \\ n \\ 0 | xargs -0 -n1 chmod 755' –