MC, 2025
Ilustracja do artykułu: Magia w terminalu: Bash usuwanie suffixu z nazwy pliku

Magia w terminalu: Bash usuwanie suffixu z nazwy pliku

Czy kiedykolwiek miałeś pliki z końcówkami, których chcesz się pozbyć? Może generujesz raporty w formacie "raport_2024.csv", a chcesz dostać sam "raport"? Dobra wiadomość – Bash ma dla Ciebie narzędzia, które potrafią to załatwić w mig! W tym artykule pokażemy Ci, jak podejść do tematu bash usuwanie suffixu z nazwy pliku z uśmiechem na twarzy i kodem w terminalu.

Dlaczego warto znać techniki manipulacji nazwami plików?

Automatyzacja, oszczędność czasu, większa kontrola – to tylko niektóre z zalet umiejętnego operowania na nazwach plików. Często przy tworzeniu backupów, skryptów analitycznych czy sortowania danych potrzebujemy pracować na czystych nazwach plików – bez rozszerzeń, dat czy numerów wersji.

Podstawy operacji na stringach w Bashu

Zanim rzucimy się w wir przykładów, musimy zrozumieć, jak Bash manipuluje ciągami znaków. Oto najprostszy przykład usunięcia rozszerzenia:

filename="raport_2024.csv"
basename="${filename%.csv}"
echo "$basename" # wynik: raport_2024

Operator % usuwa najkrótsze dopasowanie wzorca od końca ciągu. Jeżeli chcesz usunąć wszystko po kropce:

filename="raport_2024.csv"
basename="${filename%%.*}"
echo "$basename" # wynik: raport_2024

Bash usuwanie suffixu z nazwy pliku przykłady

Pora na konkrety! Zobaczmy kilka scenariuszy, które często pojawiają się w codziennej pracy:

1. Usunięcie rozszerzenia pliku

filename="zdjecie_wakacje.jpg"
clean_name="${filename%.*}"
echo "$clean_name" # zdjecie_wakacje

2. Usunięcie daty na końcu nazwy

Załóżmy, że plik nazywa się dane_20240415.txt i chcesz usunąć datę:

filename="dane_20240415.txt"
clean_name="${filename%_*}"
echo "$clean_name" # dane

3. Usunięcie suffixu "_backup"

filename="projekt_backup.zip"
clean_name="${filename%_backup.zip}"
echo "$clean_name" # projekt

4. Usuwanie z listy plików

A co jeśli chcesz usunąć suffix z wielu plików naraz? Pętla przychodzi z pomocą!

for file in *.txt; do
  new_name="${file%.txt}"
  echo "Nowa nazwa: $new_name"
done

To wygeneruje "czyste" nazwy dla każdego pliku z rozszerzeniem .txt.

Użycie komendy basename

Czasem możesz skorzystać z zewnętrznych komend, np. basename:

basename "raport_finansowy_2024.csv" .csv
# wynik: raport_finansowy_2024

Zaawansowane manipulacje z sed i awk

Jeśli chcesz być bardziej kreatywny, możesz użyć sed lub awk. Na przykład:

echo "archiwum_maj_2023.zip" | sed 's/_maj_2023.zip//'
# wynik: archiwum

To przydaje się, gdy suffix ma bardziej złożoną strukturę.

Tworzenie funkcji Bash do usuwania suffixu

Dla większej wygody stwórzmy funkcję, która zrobi to za nas:

remove_suffix() {
  local name="$1"
  local suffix="$2"
  echo "${name%$suffix}"
}

remove_suffix "raport_koncowy_v2.pdf" "_v2.pdf"
# wynik: raport_koncowy

Teraz wystarczy wywołać remove_suffix z odpowiednimi argumentami!

Najczęstsze błędy i jak ich unikać

  • Nie dopasowanie suffixu – upewnij się, że pasuje dokładnie do końcówki pliku.
  • Użycie zbyt ogólnego wzorca – może usunąć więcej niż chcesz.
  • Brak cudzysłowów – Bash może źle zinterpretować spacje.

Porady praktyczne – Bash usuwanie suffixu z nazwy pliku

Zawsze testuj operacje na plikach w "trybie suchym", czyli np. wypisuj nowe nazwy zamiast od razu zmieniać je komendą mv. Na przykład:

for f in *.bak; do
  new="${f%.bak}"
  echo "mv \"$f\" \"$new\""
done

Jeśli wszystko wygląda dobrze – zamień echo na mv i gotowe!

Podsumowanie

Opanowanie technik usuwania suffixów w Bashu to prawdziwa supermoc dla każdego, kto często pracuje z plikami. Dzięki prostym konstrukcjom takim jak %, %%, czy narzędziom typu sed i awk, możesz z łatwością zapanować nad chaosem w nazwach. Mamy nadzieję, że ten radosny przewodnik po bash usuwanie suffixu z nazwy pliku sprawił, że temat stał się lekki, przyjemny i przede wszystkim – praktyczny!

A jeśli znasz inne ciekawe sposoby, podziel się nimi w komentarzu. Świat Bashowych trików czeka na odkrycie!

Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!

Imię:
Treść: