Nota: - $USER stamperà i nomi utente degli utenti che hanno effettuato l'accesso corrente.
Se sei curioso di sapere quale versione di bash shell è installata nel sistema, possiamo controllarla usando il seguente comando.
$ bash --versionUscita versione Bash.
Creazione ed esecuzione di script Bash
Iniziamo con la creazione di un semplice file utilizzando qualsiasi editor di tua scelta. Per me, l'editor vi è più comodo. Per rendere eseguibile il file, dobbiamo aggiungere shebang (!#) e la posizione dell'interprete bash all'inizio dello script. ho creato un testo.txt e aggiungilo a bash_demo dir nella mia directory home che contiene del testo a scopo dimostrativo.
$ touch bash_demo.sh$ vi bash_demo.sh
Aggiungi le seguenti righe nel tuo editor di testo per una demo di esempio dopo aver creato un file; se non l'hai fatto, l'editor creerà un nuovo file in scrittura ed esci.
#!/bin/bashcp testo.txt /tmp/
echo “File copiato."
Possiamo eseguire lo script usando ./ prima del file di script, che determina il file dir corrente.
$ ./bash_demo.shQuando eseguiamo lo script, verrà generato il seguente errore nel nostro terminale.
Esecuzione iniziale del file bash.
Quando creiamo un file per impostazione predefinita, l'utente non dispone dei permessi di esecuzione per il file. Per fornire il permesso di esecuzione all'utente, deve essere eseguito il seguente comando.
$ chmod +x bash_demo.shUscita dopo autorizzazione concessa.
Copia solo i file da una directory specifica
Per recuperare tutti i file e la directory da un percorso specifico, utilizzeremo il ciclo for nello script, quindi filtreremo l'unico file utilizzando la condizione if. Nell'esempio seguente, eseguiamo il comando cp eseguito solo se l'iteratore era un file che è determinato flag -f.
#!/bin/bashdpath = /var/log/nginx/*
per FILE in $dpath
fare
if [[ -f $FILE ]]
poi
cp $FILE /home/$UTENTE/
altro
echo “Non ci sono file nel percorso indicato."
fi
fatto
Copia tutti i file con estensioni specifiche
In questo esempio, copieremo tutti i file con il .estensione di registro. Dobbiamo aggiungere *.log al percorso in modo da iterare l'unico file con .estensione log solo per loop.
#!/bin/bashper FILE in /var/log/nginx/*.log
fare
cp $FILE /home/$UTENTE/
fatto
Copia tutti i file, inclusa la directory
In questo esempio, copieremo tutti i file, incluse le directory, in modo ricorsivo. Per questo, dobbiamo semplicemente aggiungere il comando -R cp dove -R determina il recupero ricorsivo della directory.
#!/bin/bashper FILE in /var/log/*
fare
cp -R $FILE /home/$UTENTE/
fatto
Copia i file dal percorso specificato dall'utente
In questo esempio, copieremo i file dalla directory specificata dall'utente. Per fare ciò, useremo il comando read per richiedere il percorso all'utente, quindi controlleremo se l'utente fornisce il percorso a dir o meno, cosa che viene eseguita dal flag -d nella condizione. Dopo aver verificato dir, utilizzeremo un ciclo for per iterare tutti i file e la directory all'interno del percorso specificato, quindi filtreremo nuovamente i soli file utilizzando la condizione if. Se la condizione corrisponde, verrà eseguito il seguente comando cp.
#!/bin/bashecho “Fornisci un percorso a dir."
leggi il percorso
if [[ -d $percorso ]]
poi
per FILE in $percorso/*
fare
if [[ -f $FILE ]]
poi
cp $FILE /home/$UTENTE/
altro
echo “Non ci sono file nel percorso indicato."
fi
fatto
altro
echo "Il percorso per la directory è obbligatorio"
fi
Nella mia directory home, ho i seguenti file e directory.
Output quando si fornisce il percorso di un file.
Output quando si fornisce il percorso di posizione della directory.
Dopo aver eseguito il file di script, possiamo controllare l'output nella directory predefinita nello script. Nel mio caso, ho copiato il file nella mia directory home e il risultato è il seguente.
Conclusione
In questo articolo, impariamo come copiare i file usando lo scripting bash. Possiamo usare molte altre operazioni come un ciclo, if-else, ecc. Lo scripting Bash è più efficace quando si lavora con più comandi per eseguire attività specifiche. Spero che questo articolo sulla copia di file utilizzando uno script bash ti piaccia.