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 |