[+] bash - zmiana nazw wszystkich plików w folderze

Potrzebujesz pomocy z C, C++, perl, python, itp.
Smerf
Posty: 35
Rejestracja: 15 września 2007, 20:58

[+] bash - zmiana nazw wszystkich plików w folderze

Post autor: Smerf »

Cześć. Chciałem się kiedyś nauczyć programować w bashu ale jakoś nie wyszło. Teraz mam problem.
Mam n plików w folderze posortowanych alfabetycznie. Teraz chciałbym im zmienić nazwy, tak że pierwszy plik będzie miał nazwę 1, drugi nazwę 2, ... ,ostatni nazwę n.

Mógłby mi ktoś napisać ten skrypt?

Ja już zacząłem to ręcznie robić.
ilr
Posty: 76
Rejestracja: 29 stycznia 2007, 13:15
Lokalizacja: Universum

Post autor: ilr »

Zainteresuj się pakietem mrename.
Awatar użytkownika
ultr
Posty: 19
Rejestracja: 14 listopada 2007, 00:10
Lokalizacja: Łódź

Post autor: ultr »

Sprawa jest stosunkowo prosta.

Jedynym problemem jest to, że trzeba uważać na nazwy plików, aby się nie powtórzyły. Dla takich plików zmiana plików po kolei nie zadziała: 1, 11, 2 - Plik 11 będzie miał zmienioną nazwę na 2, ale taki plik już istnieje.
Dlatego najlepiej przenieść je do tymczasowego katalogu, a na koniec przenieść z powrotem.

Kod: Zaznacz cały

#!/bin/bash
mkdir -p ./$1/.temp
n=1
for plik in `find ./$1/ -maxdepth 1 -type f | sort`; do
  mv "$plik" "./$1/.temp/$n"
  n=`expr $n + 1`
done
for plik in `find ./$1/.temp/ -maxdepth 1 -type f`; do
  mv "$plik" "./$1/"
done
rmdir ./$1/.temp
Powinno działać. Skrypt należy wywołać ze względną ścieżką do katalogu z plikami do zmiany nazwy.
ODPOWIEDZ