BashFAQ/056 fa un lavoro decente di spiegare perché quello che hai provato non funziona. Dare un'occhiata.
Dato che stai utilizzando bash (in base al tuo errore), il comando for
è tuo amico.
for filename in *.php; do
echo "text" >> $filename
done
Se vuoi tirare "testo" da un file, si potrebbe invece fare questo:
for filename in *.php; do
cat /path/to/sourcefile >> $filename
done
Ora ... si potrebbe dispone di file nelle sottodirectory. Se è così, è possibile utilizzare il comando find
per trovare e elaborarli:
find . -name "*.php" -type f -exec sh -c "cat /path/to/sourcefile >> {}" \;
Il comando find
identifica quali file utilizzando condizioni come -name
e -type
, quindi il comando -exec
corre fondamentalmente la stessa cosa che si ha mostrato nel precedente "per" ciclo. L'\;
finale indica a find
che questa è la fine degli argomenti per l'opzione -exec
.
È possibile man find
per molti altri dettagli su questo.
Il comando find
è portatile ed è generalmente consigliato per questo tipo di attività, soprattutto se si desidera che la soluzione sia portabile su altri sistemi. Ma dal momento che si sta attualmente utilizzando bash
, si può anche essere in grado di gestire le sottodirectory utilizzando l'opzione di bash globstar
:
shopt -s globstar
for filename in **/*.php; do
cat /path/to/sourcefile >> $filename
done
È possibile man bash
e cercare "globstar" per maggiori dettagli su questo.
NOTA: Potresti avere altri problemi con quello che stai facendo. Gli script PHP non richiedono per terminare con uno ?>
, quindi potresti aggiungere HTML che lo script proverà ad interpretare come codice PHP.
Che dire i file nelle sottodirectory? Devo aggiungere anche questo. PS: ho usato il comando 'for i in $ un fare echo "il codice" >> $ i done' Ma in tutti i file in essa allegata due volte e non è successo niente ai file nelle directory secondarie. –
Il comando "trova" è migliore per le sottodirectory. – Graham
Per l'esempio bash, citare '$ i' per gestire i file con spazi al loro interno per –