Często się zdarza, że chcesz zmienić nazwę lub jej fragment dla wielu plików znajdujących się w danym katalogu.
Przykładowo w katalogu z kopiami danych posiadasz pliki o nazwach:
-
kopia_dane.txt
-
kopia_listy.txt
-
kopia_wpisy.txt
i chcesz usunąć fragment nazwy kopia_ .
Rozwiązaniem tego problemu jest napisanie skryptu, który pobierze z katalogu nazwy wszystkich plików z podanym ciągiem znaków, po czym usunie go lub zamieni na inny.
#!/bin/bash
for i in kopia_*
do mv "$i" "`echo $i | sed 's/kopia_//g'`"
done
Skrypt zapisujemy pod nazwą np. zamiana , nadajemy mu prawa wykonywania - chmod +x zamiana .
Skrypt uruchamiamy poleceniem ./zamiana .
Opis działania skryptu:
Pętla for pobiera z katalogu nazwy wszystkich plików o wzorcu kopia_* . Następnie polecenie mv zamienia nazwę kolejnego pliku pobranego ze zmiennej $i na tą samą nazwę, lecz przetworzoną przez program sed , który umożliwia zamianę podanego ciągu znaków na inny - w przypadku powyższego skryptu - pusty.
Jeśli chcemy ciąg znaków kopia_ we wszystkich plikach w katalogu zamienić na rezerwa_ , skrypt powinien wygladać następująco:
#!/bin/bash
for i in kopia_*
do mv "$i" "`echo $i | sed 's/kopia_/rezerwa_/g'`"
done