logo

Bash provjeri postoji li datoteka

Većinu vremena možemo pronaći situaciju u kojoj ćemo morati izvršiti radnju koja će provjeriti postoji li datoteka ili ne.

U Bashu možemo koristiti 'test naredbu' da provjerimo postoji li datoteka i odredimo vrstu datoteke.

Slijedi sintaksa naredbe test, a možemo koristiti bilo koju od ovih naredbi:

 test expression [ expression ] [[ expression ]] 

Od nas se zahtijeva da koristimo naredbu s jednom zagradom '[' kako bismo našu skriptu učinili prenosivom za sve POSIX ljuske. Nadograđena verzija testne naredbe sadrži dvostruke zagrade '[[' koje je podržano na većini modernih sustava koji koriste Bash, Zsh i Ksh kao zadanu ljusku.

Provjerite postoji li datoteka

Prilikom provjere postoji li datoteka, najčešće korišteni operatori datoteke su -e i -f. Opcija '-e' koristi se za provjeru postoji li datoteka bez obzira na vrstu, dok se opcija '-f' koristi za vraćanje prave vrijednosti samo ako je datoteka obična datoteka (ne direktorij ili uređaj).

Najčešća opcija za provjeru postoji li datoteka ili ne je korištenje test naredbe s 'if uvjetnom naredbom'.

Slijede primjeri za provjeru postoji li datoteka 'read_file.txt':

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 

Izlaz

Izlaz za sve tri metode bit će kao ispod jer imamo datoteku (read_file.txt) koja se nalazi u direktoriju:

primjer java klase
 read_file.txt exist 

Ako želimo izvesti radnju koja će dati rezultat na temelju toga postoji li datoteka ili ne, možemo upotrijebiti konstrukciju if/then na sljedeći način:

Primjer

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

Izlaz

 read_file.txt exist 

Naredbu test možemo koristiti i bez naredbe if. Možemo koristiti bilo koju od sljedećih metoda:

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' 

Izlaz

Izlaz za sve tri metode bit će kao ispod jer imamo datoteku (read_file.txt) koja se nalazi u direktoriju:

 read_file.txt exist 

Ako postoji nekoliko naredbi koje treba pokrenuti nakon && operatora, tada ih stavite u vitičaste zagrade odvojene točkom-zarezom(;) ili I (&&), tj.:

Primjer

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

Za razliku od &&, iskaz nakon || operator se izvršava samo ako je status izlaza testne naredbe 'false'.

Primjer

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

Izlaz

 read_file.txt exist 

Ovo su najčešće korištene metode u Bashu za provjeru postoji li datoteka ili ne.

Provjerite postoji li imenik

Operator '-d' omogućuje nam da testiramo je li datoteka direktorij ili nije.

Slijede metode za provjeru postoji li direktorij 'Javatpoint':

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' 

Bilješka:Također možemo koristiti dvostruke zagrade '[[' umjesto jednostruke zagrade '['.

Izlaz

Izlaz za obje gore navedene metode bit će sljedeći jer imamo direktorij (nazvan Javatpoint) prisutan na navedenoj lokaciji:

 Javatpoint is a directory 

Provjerite AKO datoteka ne postoji

Testni izraz može se negirati korištenjem uskličnika (! -logički NOT operator). Pogledajte sljedeći primjer:

Primjer

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

Gornja skripta također se može napisati kao ispod:

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

Izlaz

java programi
 missing_read_file.txt unavailable 

Operatori testa datoteke

Testne naredbe uključuju sljedeće operatore datoteka koji nam omogućuju testiranje određenih vrsta datoteka:

-b Vraća datoteke 'Istina' ako DATOTEKA postoji kao blok posebna datoteka.
-c Vraća datoteke 'Istina' ako DATOTEKA postoji kao datoteka s posebnim znakovima.
-d Vraća datoteke 'Istina' ako DATOTEKA postoji kao direktorij.
-e Vraća datoteke 'Istina' ako DATOTEKA postoji kao datoteka, bez obzira na vrstu (čvor, direktorij, utičnica itd.).
-f Vraća datoteke 'Istina' ako DATOTEKA postoji kao obična datoteka (ne direktorij ili uređaj).
-G Vraća datoteke 'Istina' ako DATOTEKA postoji i sadrži istu grupu kao korisnik koji izvodi naredbu.
-h Vraća datoteku 'Istina' ako DATOTEKA postoji kao simbolička veza.
-g Vraća datoteke 'Istina' ako DATOTEKA postoji i sadrži postavljenu oznaku set-group-id (sgid).
-k Vraća datoteke 'Istina' ako DATOTEKA postoji i sadrži postavljenu oznaku ljepljivog bita.
-L Vraća datoteke 'Istina' ako DATOTEKA postoji kao simbolička veza.
-O Vraća datoteke 'Istina' ako DATOTEKA postoji iu vlasništvu je korisnika koji izvodi naredbu.
-p Vraća datoteke 'Istina' ako DATOTEKA postoji kao cijev.
-r Vraća datoteku 'Istina' ako DATOTEKA postoji kao čitljiva datoteka.
-S Vraća datoteke 'Istina' ako DATOTEKA postoji kao utičnica.
-s Vraća datoteke 'Istina' ako DATOTEKA postoji i ima veličinu različitu od nule.
-u Vraća datoteke 'Istina' ako DATOTEKA postoji i postavljena je zastavica set-user-id (suid).
-w Vraća datoteku 'Istina' ako DATOTEKA postoji kao datoteka u koju je moguće pisati.
-x Vraća datoteke 'Istina' ako DATOTEKA postoji kao izvršna datoteka.