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

Ucięcie wszystkiego na prawo od wystąpienia wzorca czyli Wielkiej litery

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:


Date: 2020-10-14T15:17:50+02:00