logo

Bash kontrollera om filen finns

För det mesta kan vi hitta en situation där vi kan behöva utföra en åtgärd som kontrollerar om en fil finns eller inte.

I Bash kan vi använda ett 'testkommando' för att kontrollera om en fil finns och bestämma typen av en fil.

Följande är syntaxerna för testkommandot, och vi kan använda något av dessa kommandon:

 test expression [ expression ] [[ expression ]] 

Vi är skyldiga att använda ett enkla parentes '['-kommando för att göra vårt skript portabelt för alla POSIX-skal. Den uppgraderade versionen av testkommandot innehåller dubbla parenteser '[[' som stöds på de flesta moderna system som använder Bash, Zsh och Ksh som standardskal.

Kontrollera om filen finns

När du kontrollerar om en fil finns, är de vanligaste filoperatorerna -e och -f. Alternativet '-e' används för att kontrollera om en fil existerar oavsett typ, medan alternativet '-f' används för att returnera sant värde endast om filen är en vanlig fil (inte en katalog eller en enhet).

Det vanligaste alternativet för att kontrollera om filen finns eller inte är att använda testkommandot med 'if conditional-satsen'.

Följande är exempel för att kontrollera om filen 'read_file.txt' finns:

Metod 1

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

Metod 2

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

Metod 3

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

Produktion

Utdata för alla tre metoderna kommer att vara som nedan eftersom vi har en fil (read_file.txt) i katalogen:

pyspark sql
 read_file.txt exist 

Om vi ​​vill utföra en åtgärd som ger ett resultat baserat på om filen finns eller inte, kan vi använda if/then-konstruktionen på följande sätt:

Exempel

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

Produktion

 read_file.txt exist 

Vi kan också använda testkommandot utan if-satsen. Vi kan använda någon av följande metoder:

Metod 1

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

Metod 2

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

Metod 3

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

Produktion

Utdata för alla tre metoderna kommer att vara som nedan eftersom vi har en fil (read_file.txt) i katalogen:

 read_file.txt exist 

Om det finns flera kommandon som ska köras efter &&-operatorn, omslut kommandona inom parenteser separerade med semikolon(;) eller AND (&&), dvs.:

Exempel

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

Till skillnad från &&, uttalandet efter || operatören exekveras endast om utgångsstatusen för testkommandot är 'falskt'.

Exempel

konvertera sträng till datum
 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' || echo '$File does not exist' 

Produktion

 read_file.txt exist 

Det här är de vanligaste metoderna i Bash för att kontrollera om filen finns eller inte.

Kontrollera om katalogen finns

Operatören '-d' låter oss testa om en fil är en katalog eller inte.

Följande är metoderna för att kontrollera om 'Javatpoint'-katalogen finns:

Metod 1

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

Metod 2

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

Notera:Vi kan också använda dubbla parenteser '[[' istället för en enkel parentes '['.

Produktion

Utdata för båda ovanstående metoder kommer att vara som nedan eftersom vi har en katalog (som heter Javatpoint) på den angivna platsen:

 Javatpoint is a directory 

Kontrollera OM filen inte finns

Testuttrycket kan negeras genom att använda utropstecken (! -logical NOT-operator). Kolla in följande exempel:

Exempel

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

Ovanstående script kan också skrivas enligt nedan:

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

Produktion

 missing_read_file.txt unavailable 

Filtestoperatörer

Testkommandona inkluderar följande filoperatörer som låter oss testa för särskilda typer av filer:

-b Fil Returnerar 'True' om FILEN existerar som en speciell blockfil.
-c Fil Returnerar 'True' om FILEN finns som en specialteckenfil.
-d File Returns 'True' om FILEN finns som en katalog.
-e File Returns 'True' om FILEN existerar som en fil, oavsett typ (nod, katalog, socket, etc.).
-f File Returns 'True' om FILEN existerar som en vanlig fil (inte en katalog eller enhet).
-G File Returns 'True' om FILEN finns och innehåller samma grupp som användaren kör kommandot.
-h Fil Returnerar 'True' om FILEN existerar som en symbolisk länk.
-g File Returns 'True' om FILEN finns och innehåller set-group-id (sgid) flagguppsättning.
-k Fil Returnerar 'True' om FILEN finns och innehåller en sticky bit-flaggauppsättning.
-L File Returns 'True' om FILEN existerar som en symbolisk länk.
-O File Returns 'True' om FILEN finns och ägs av användaren som kör kommandot.
-p File Returns 'True' om FILEN existerar som en pipe.
-r File Returns 'True' om FILEN finns som en läsbar fil.
-S File Returns 'True' om FILEN existerar som en socket.
-s File Returns 'True' om FILEN finns och har en storlek som inte är noll.
-u File Returns 'True' om FILEN finns och set-user-id (suid) flaggan är inställd.
-w File Returns 'True' om FILEN finns som en skrivbar fil.
-x File Returns 'True' om FILEN existerar som en körbar fil.