Introduzione
Ci sono diverse funzioni in Linux che funzionano solo se esiste un particolare file o directory. Bash è una shell che interpreta i comandi. Puoi usare un
In questa guida, scopri come utilizzare un comando bash per verificare se esiste un file o una directory.
Prerequisiti
- Un sistema operativo Linux
- Accesso a una finestra del terminale/riga di comando (Ctrl-Alt-T / Ctrl-Alt-F2)
Come verificare se esiste un file
Per verificare il file /tmp/test.log , inserisci quanto segue dalla riga di comando:
test –f /tmp/test.txt
La prima riga esegue il test per vedere se il file esiste. Il secondo comando, eco , visualizza i risultati 0 significa che il file esiste, 1 significa che nessun file è stato trovato.
echo $?
Nel nostro esempio, il risultato era 1.
Ora prova a creare un file, quindi provalo:
touch /tmp/test.txt
test –f /tmp/test.txt
echo $?
Poiché abbiamo creato il file in precedenza, il risultato ora è 0:
Puoi anche utilizzare parentesi quadre invece del test comando:
[ –f /tmp/test.txt ]
echo $?
Come verificare se esiste una directory
Per verificare se esiste una directory, disattiva –f opzione nel test comando per –d (per rubrica):
test –d /tmp/test
echo $?
Crea quella directory ed esegui nuovamente il test:
touch /tmp/test
test –d /tmp/test
echo $?
Questo comando funziona come per i file, quindi usa le parentesi invece del test il comando funziona anche qui.
Come verificare se un file non esiste
In genere, il test di un file restituisce 0 (true) se il file esiste e 1 (false) se il file non esiste. Per alcune operazioni, potresti voler invertire la logica. È utile scrivere uno script per creare un file particolare solo se non esiste già.
Per creare un file se non ne esiste già uno, inserisci quanto segue da una riga di comando:
[ ! –f /tmp/test.txt ] && touch /tmp/test.txt
Il punto esclamativo ! sta per non . Questo comando assicura che non sia presente un file denominato test.txt nel /tmp directory. Non vedrai succedere nulla.
Per vedere se il sistema ha creato il file, inserisci quanto segue:
ls /tmp
Dovresti vedere test.txt elencato. Puoi usare un comando simile per una directory:sostituisci –f opzione con –d :
[ ! –d /tmp/test ] && touch /tmp/test
Come verificare la presenza di più file
Per testare due file contemporaneamente, usa && opzione per aggiungere un secondo file:
[ -f /tmp/test.txt && -f /tmp/sample.txt ] && echo “Both files were found”
Per verificare la presenza di più file con un carattere jolly, ad esempio un asterisco * per rappresentare vari caratteri:
[ -f /tmp/*.jpg ] && echo “Files were found”
Come al solito, modificando –f opzione su –d ti consente di eseguire lo stesso test per più directory.
Operatori di test di file per trovare tipi particolari di file
Di seguito sono riportati diversi comandi da testare per trovare tipi specifici di file:
- -f – file
- -d – directory
- – L – collegamento simbolico
- -r – leggibile
- -x – eseguibile
- –noi – scrivibile
Ci sono molte altre opzioni disponibili. Si prega di consultare la pagina principale (test ––help) per ulteriori opzioni.
Utilizzo degli snippet di codice
I comandi precedenti funzionano bene per un semplice comando a due righe al prompt dei comandi. Puoi anche usare bash con più comandi. Quando più comandi sono messi insieme, sono chiamati script .
Uno script di solito viene salvato come file ed eseguito. Lo scripting utilizza anche operatori logici per verificare una condizione, quindi esegue un'azione in base ai risultati del test.
Per creare un file di script, usa l'editor Nano per aprire un nuovo file:
sudo nano bashtest.sh
Inserisci uno degli snippet dal basso, incluso #!/bin/bash identificatore. Usa Ctrl-o per salvare il file, quindi Ctrl-x per uscire da Nano. Quindi, esegui lo script immettendo:
bash bashtest.sh
Il frammento di codice seguente verifica la presenza di un file particolare. Se il file esiste, lo script visualizza File esistente sullo schermo.
#!/bin/bash
if [ -f /tmp/test.txt ]
then
echo “File exists”
fi
Funziona allo stesso modo se stai cercando una directory. Sostituisci semplicemente –f opzione con –d :
#!/bin/bash
if [ -d /tmp/test ]
then
echo “File exists”
fi
Questo comando verifica la directory /tmp/test . Se esiste, il sistema visualizza File esistente .