Jak sprawdzić czy plik lub katalog istnieje w Linux/Unix?

W skryptach często istnieje konieczność sprawdzenia przed wykonaniem jakieś akcji, czy dany plik istnieje czy też nie. Możemy tego dokonać przy pomocy instrukcji warunkowej if wraz z parametrem -e. Spójrzmy na poniższy przykład:

if [ -e plik-testowy.txt ]; then
 echo "plik istnieje"
else
 echo "brak pliku"
fi

Powyższy skrypt wyświetli komunikat: “plik istnieje” jeżeli plik-testowy.txt istnieje, lub “brak pliku” jeżeli pliku nie będzie.

Możemy również dodać jakąś akcję, np. gdy plik istnieje, zmień jego nazwę na archiwum.txt. Dla takiego przykładu skrypt wygląda następująco:

if [ -e plik-testowy.txt ]; then
 echo "zmieniam nazwę"
 mv plik-testowy.txt archiwum.txt
fi

Poza parametrem -e istnieją jeszcze inne. Poniżej znajduje się lista najczęściej używanych:

if [ -a plik ] – zwraca prawdę jeśli plik istnieje, fałsz gdy brak pliku
if [ -d plik ] – zwraca prawdę jeśli plik istnieje i jest katalogiem, w przeciwnym wypadku fałsz
if [ -e plik ] – zwraca prawdę jeśli plik istnieje, fałsz gdy brak pliku
if [ -f plik ] – zwraca prawdę jeśli plik jest plikiem regularnym, fałsz w przeciwnym wypadku
if [ -h plik ] – zwraca prawdę jeśli plik jest linkiem symbolicznym, fałsz w przeciwnym wypadku
if [ -r plik ] – zwraca prawdę jeśli plik posiada uprawnienia do odczytu, fałsz w przeciwnym wypadku
if [ -s plik ] – zwraca prawdę jeśli plik istnieje i nie jest pusty (rozmiar > 0), fałsz w przeciwnym wypadku
if [ -w plik ] – zwraca prawdę jeśli plik posiada uprawnienia do zapisu, fałsz w przeciwnym wypadku
if [ -x plik ] – zwraca prawdę jeśli plik posiada uprawnienia do uruchomienia, fałsz w przeciwnym wypadku