Nazwa pliku bez ścieżki
Na podstawie prostego skryptu pokażę jak wyświetlić nazwę pliku bez katalogu oraz jak wyświetlić samą nazwę pliku bez rozszerzenia.
Pętla for
pokazuje wszystkie pliki w katalogu katalog
wraz z nazwą tego katalogu
np. katalog/nazwa-pliku.txt
, chcąc uzyskać samą nazwę pliku użyjemy komendy
basename
.
for i in katalog/*.txt do PLIK=$(basename $i | cut -d '.' -f 1) echo "$PLIK" done
Inny przykład użycia komendy basename
VIMRC_DIR="$HOME/.vim/vimrc" VIMRC=$(basename "$VIMRC_DIR") echo $VIMRC
vimrc
Użycie komendy basename
basename katalog/plik.txt plik.txt
Nazwa pliku bez rozszerzenia
Skoro mamy już samą nazwę pliku plik.txt
, to teraz spróbujemy uzyskać nazwę
pliku bez rozszerzenia. Używając polecenia cut
oraz parametru -d '.'
, który
określa separator pomiędzy polami, wyświetlimy pole numer 1 czyli nazwę pliku,
służy do tego parametr -f 1
.
basename katalog/plik.txt | cut -d '.' -f 1 plik
Ten sam rezultat możemy uzyskać używając wyłącznie polecenia basename jednak musimy znać rozszerzenie pliku.
basename katalog/plik.txt .txt plik
Samo rozszerzenie
Jeśli chcemy wyświetlić samą nazwę rozszerzenia, to należy użyć polecenia cut
,
gdzie parametr -f1
należy zastąpić -f2
lub -f2,3
.
Dla powłoki BASH można użyć innego rozwiązania, [shell parameters expansion](https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html#Shell-Parameter-Expansion),
w zmiennej wyszukujemy wzoru np. .*
a następnie cała reszta zostaje usunięta.
FILE=plik.conf EXT="${FILE##.*}" echo $EXT
conf
W przypadku plików zaczynających od .
trzeba zastosować inny wzór FILE##*.
FILE=.tmux.conf EXT="${FILE##*.}" echo $EXT
conf
Przykłady użycia wzorców na zmiennych
ZM="terefere/234/234234małaDuża" echo "${ZM%%[[:upper:]]*}" terefere/234/234234mała
Ucięcie od wystąpienia wzoraca do końca zmiennej, czyli w tym przypadku pokazuje wszystko na prawo od wystąpienia cyfry.
ZM="terefere/234/234234małaDuża" echo "${ZM##*[[:digit:]]}" małaDuża
Dodatkowe informacje:
-
[Shell Parameter Expansion](https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html)
-
[Pattern Matching](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html)
Date: 2020-10-14T15:17:50+02:00 |