logo

Bash verifica dacă fișierul există

De cele mai multe ori, este posibil să găsim o situație în care este posibil să fie nevoie să efectuăm o acțiune care să verifice dacă un fișier există sau nu.

În Bash, putem folosi o „comandă de testare” pentru a verifica dacă un fișier există și pentru a determina tipul unui fișier.

Următoarele sunt sintaxele comenzii de testare și putem folosi oricare dintre aceste comenzi:

 test expression [ expression ] [[ expression ]] 

Ni se cere să folosim o singură comandă „[” pentru a face scriptul nostru portabil pentru toate shell-urile POSIX. Versiunea actualizată a comenzii de testare conține paranteze duble „[[”, care este acceptată pe majoritatea sistemelor moderne folosind Bash, Zsh și Ksh ca shell implicit.

Verificați dacă fișierul există

În timp ce verifică dacă un fișier există, cei mai des utilizați operatori de fișiere sunt -e și -f. Opțiunea „-e” este folosită pentru a verifica dacă un fișier există, indiferent de tip, în timp ce opțiunea „-f” este folosită pentru a returna valoarea adevărată numai dacă fișierul este un fișier obișnuit (nu un director sau un dispozitiv).

Cea mai obișnuită opțiune pentru a verifica dacă fișierul există sau nu este să utilizați comanda de testare cu „instrucțiunea condițională if”.

Următoarele sunt exemple pentru a verifica dacă fișierul „read_file.txt” există:

Metoda 1

 #!/bin/bash File=read_file.txt if test -f '$File'; then echo '$File exist ' fi 

Metoda 2

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist ' fi 

Metoda 3

 #!/bin/bash File=read_file.txt if [[ -f '$File' ]]; then echo '$File exist ' fi 

Ieșire

Ieșirea pentru toate cele trei metode va fi ca mai jos, deoarece avem un fișier (read_file.txt) prezent în director:

sortare grămadă
 read_file.txt exist 

Dacă dorim să efectuăm o acțiune care va oferi un rezultat în funcție de faptul că fișierul există sau nu, putem folosi construcția if/then în felul următor:

Exemplu

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist' else echo '$File does not exist' fi 

Ieșire

 read_file.txt exist 

Putem folosi și comanda test fără instrucțiunea if. Putem folosi oricare dintre următoarele metode:

Metoda 1

 #!/bin/bash File=read_file.txt test -f read_file.txt && echo '$File exist' 

Metoda 2

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' 

Metoda 3

 #!/bin/bash File=read_file.txt [[ -f read_file.txt ]] && echo '$File exist' 

Ieșire

Ieșirea pentru toate cele trei metode va fi ca mai jos, deoarece avem un fișier (read_file.txt) prezent în director:

 read_file.txt exist 

Dacă există mai multe comenzi care urmează să fie executate după operatorul &&, apoi introduceți comenzile între paranteze separate prin punct și virgulă (;) sau ȘI (&&), adică:

Exemplu

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && { echo '$File exist'; echo 'Task Completed'; } 

Spre deosebire de &&, afirmația de după || operatorul este executat numai dacă starea de ieșire a comenzii de testare este „falsă”.

string.replaceall în java

Exemplu

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' || echo '$File does not exist' 

Ieșire

 read_file.txt exist 

Acestea sunt metodele frecvent utilizate în Bash pentru a verifica dacă fișierul există sau nu.

Verificați dacă directorul există

Operatorul „-d” ne permite să testăm dacă un fișier este un director sau nu.

Următoarele sunt metodele pentru a verifica dacă directorul „Javatpoint” există:

Metoda 1

 #!/bin/bash File=Javatpoint if [ -d '$File' ]; then echo '$File is a directory' fi 

Metoda 2

 #!/bin/bash File=Javatpoint [ -d '$File' ] && echo '$File is a directory' 

Notă:De asemenea, putem folosi paranteze duble „[[” în loc de o singură paranteză „[”.

Ieșire

Ieșirea pentru ambele metode de mai sus va fi ca mai jos, deoarece avem un director (numit Javatpoint) prezent în locația specificată:

 Javatpoint is a directory 

Verificați dacă fișierul nu există

Expresia test poate fi anulată folosind semnul exclamării (operatorul! -logic NOT). Consultați următorul exemplu:

Exemplu

 #!/bin/bash File=missing_read_file.txt if [ ! -f '$File' ]; then echo '$File does not exist' fi 

Scriptul de mai sus poate fi scris și după cum urmează:

 #!/bin/bash File=missing_read_file.txt [ ! -f '$File' ] && echo '$File unavailable' 

Ieșire

 missing_read_file.txt unavailable 

Operatori de testare a fișierelor

Comenzile de testare includ următorii operatori de fișiere care ne permit să testăm anumite tipuri de fișiere:

-b Fișier returnează „Adevărat” dacă FILE există ca fișier special bloc.
-c Fișierul returnează „True” dacă FILE există ca fișier cu caractere speciale.
-d Fișierul returnează „Adevărat” dacă FIȘIERUL există ca director.
-e Fișierul returnează „True” dacă FILE există ca fișier, indiferent de tip (nod, director, socket etc.).
-f Fișier returnează „Adevărat” dacă FILE există ca fișier obișnuit (nu un director sau dispozitiv).
-G File returnează „Adevărat” dacă FILE există și conține același grup în care utilizatorul rulează comanda.
-h Fișierul returnează „Adevărat” dacă FIȘIERUL există ca o legătură simbolică.
-g Fișier returnează „True” dacă FILE există și conține set-group-id (sgid) setat.
-k Returnează fișierul „True” dacă FILE există și conține un set de indicatori de biți sticky.
-L Se întoarce fișierul „Adevărat” dacă FIȘIERUL există ca o legătură simbolică.
-O Fișier returnează „True” dacă FILE există și este deținut de utilizatorul care execută comanda.
-p Se întoarce fișierul „True” dacă FILE există ca conductă.
-r Se întoarce fișierul „Adevărat” dacă FILE există ca fișier care poate fi citit.
-S File Returns „Adevărat” dacă FILE există ca socket.
-s Fișierul returnează „Adevărat” dacă FIȘIERUL există și are dimensiune diferită de zero.
-u File Returns „True” dacă FILE există și steag-ul set-user-id (suid) este setat.
-w Fișier returnează „Adevărat” dacă FILE există ca fișier care poate fi scris.
-x Se întoarce fișierul „Adevărat” dacă FILE există ca fișier executabil.