Wsadowa zmiana nazw plików z rosnącym numerem

1

Mam partię plików:

$ ls
Li1Fe1O2_11 Li1Fe2O3_8  Li1Fe3O4_2  Li1Fe3O4_5  Li2Fe1O3_16 Li2Fe2O4_12 Li3Fe1O4_19 Li3Fe1O4_22
Li1Fe1O2_14 Li1Fe2O3_9  Li1Fe3O4_3  Li1Fe3O4_6  Li2Fe1O3_17 Li2Fe2O4_13 Li3Fe1O4_20
Li1Fe2O3_7  Li1Fe3O4_1  Li1Fe3O4_4  Li2Fe1O3_15 Li2Fe2O4_10 Li3Fe1O4_18 Li3Fe1O4_21

I chciałbym zmienić ich nazwę na:

enum-00132
enum-00133
enum-00134
...

Próbowałem zmienić nazwę bez powodzenia.

użytkownik40780
źródło
3
W jaki sposób numeracja końcowych plików jest połączona z oryginalnymi nazwami plików? Czy są one po prostu ponumerowane szeregowo?
jofel,

Odpowiedzi:

2

Użyj tego:

c=132
for f in *; do
  mv -v "$f" "enum-$(printf '%0*d' 5 $c)"
  c=$(($c+1))
done

c=<your_starting_number>; Założyłem 132jak w twoim pytaniu. Następnie forpętla przechodzi przez wszystkie pliki w bieżącym katalogu. Dla każdego pliku mvwywoływane jest polecenie. printfnarzędzie drukuje nową nazwę pliku z wiodącymi zerami. I na koniec zmienna licznika $czwiększa +1.

Edycja: jeśli chcesz używać tylko katalogów ( */katalogi tylko machtes, reszta pozostaje taka sama):

c=132
for d in */ ; do
  mv -v "$d" "enum-$(printf '%0*d' 5 $c)"
  c=$(($c+1))
done
chaos
źródło
To fantastycznie!!!!
user40780,
jedno subtelne pytanie ... Więc niektóre z nich to katalogi, jeśli chcę zmienić tylko nazwy plików katalogu. Co powinienem zrobić ? Dziękuję Ci.
user40780,
@ user40780 Zobacz moją edycję
chaos,
1
c=$((c=c+1))jest niepotrzebne. Wszystko czego potrzebujesz to c=$((c+1)). W rzeczywistości możesz to zrobić ((c++)).
Cyfrowa trauma
@DigitalTrauma Jak określono w POSIX ( pubs.opengroup.org/onlinepubs/9699919799/utilities/… ) to ( $((c=c+1))) ma najlepszą przenośność
chaos