| Jak automatycznie zmienić rozszerzenia plików np. .htm na .html? |
| Poradnik - Linux | |||
|
PROBLEM: Chcesz zmienić rozszerzenia wielu plików np. pliki .cgi na .pl lub .html na .htm. ROZWIĄZANIE: Czasem zdarza się sytuacja, że trzeba zmienić rozszerzenia wielu plików w wybranym katalogu, na przykład z .htm na .html. Łatwo sobie z tym zadaniem można poradzić w Linuksie. Wykorzystamy do tego komendy powłoki Bash, która jest domyślnym shellem w większości dystrybucji Linuksa. Na początku będziemy potrzebowali listę wszystkich plików z bieżącego katalogu z określonym rozszerzeniem (np. .htm). Dzięki zastosowaniu polecenia for możemy dla każdego z plików wykonać jakieś działania. Na początek po prostu je wyświetlmy:
Do zmiany nazwy pliku stosuje się polecenie mv, jednak potrzebujemy jeszcze drugiego argumentu, czyli tej samej nazwy pliku z nowym rozszerzeniem .html
Zapis ${plik%htm} oznacza, że ze zmiennej $plik wykorzystujemy całą jej nazwę oprócz ostnich liter htm (odcinamy rozszerzenie "htm" z prawej strony). Następnie dodajemy string html, żeby otrzymać pożądany efekt zamiany rozszerzenia. W tym momencie w zmiennej plik mamy nazwę źródłową, potrafimy również przetworzyć ją na plik docelowy. Możemy więc napisać gotowy ciąg poleceń:
Wpisywanie powyższej linijki przy każdej zamianie rozszerzeń może być kłopotliwe. Zamiast tego stworzymy skrypt, który zgrupuje wszystkie polecenia. Wpiszmy zatem powyższe polecenia do pliku: #!/bin/bash
for plik in *.htm
do
mv "$plik" "${plik%htm}html"
done
Jeżeli polecenia znajdują się w osobnych liniach, to nie trzeba ich oddzielać średnikami. Zwróć też uwagę na pierwszą linię skryptu - mówi ona o tym z jakiego interpretera ma korzystać system. Będzie potrzebna, gdy będziesz chciał uruchamiać powyższy skrypt podając tylko jego nazwę. Skrypt stanie się bardziej uniwersalny, jeśli rozszerzenia do zmiany będziemy mogli podawać jako parametry: #!/bin/bash
if [ $# -ne 2 ]
then
echo "Wywołanie: $0 rozszerzenie_stare rozszerzenie_nowe"
exit
fi
for plik in *.$1
do
mv "$plik" "${plik%$1}$2"
done
Dodatkowo w pierwszych kilku linijkach zabezpieczamy się przed podaniem niepoprawnych danych. Jeśli powyższy skrypt skopiujesz w miejsce, które jest wymienione w ścieżce poleceń (echo $PATH) i nadasz mu prawa do wykonywania (chmod 755 skrypt), to potem będąc w katalogu, w którym chcesz zmienić rozszerzenia wystarczy wydać polecenie:
i wszystkie pliki kończące się na htm zostaną zamienione na html. Jeśli na Twoim komputerze nie został zainstalowany Bash i jest jedynie prosty sh, to możesz wykorzystać zewnętrzne polecenie basename. Skrypt do zamiany może wtedy wyglądać następująco:
Polecenie basename zwraca nazwę pliku bez podanego w cudzysłowach rozszerzenia.
|