Jak masowo zmienić nazwy plików w Linuksie?


(Saver) #1

Jak zmienić nazwy plików w katalogu na 1, 2, 3 itd?

Bo teraz każdy plik ma nazwę: er34ds56a5wrwe54.php i chce zmienić plikom nazwę żeby mieli 1.php, 2.php, 3.php itd.

Ale nie chce tego ręcznie zmieniać bo jest ich 67326 tysięcy:

s15433203:~/pliki# ls | wc -l

67326

Próbowałem już napisać w bashu skrypt, ale nie wychodzi mi.. Sami zobaczcie:

#!/bin/sh

for (( i=1; $i <= 67326; i++ )) ; do

mv *.php $i.php

done

Ale gdy odpalam skrypt to:

mv: target `1.php' is not a directory

mv: target `2.php is not a directory

mv: target `3.php' is not a directory

mv: target `4.php' is not a directory

mv: target `5.php' is not a directory

mv: target `6.php' is not a directory

mv: target `7.php' is not a directory

...

A odpalam w tym katalogu gdzie są pliki php.

Bardzo proszę o pomoc.


(Pabloxxl666) #2

Ponieważ odpalasz mv na *.php , przenosisz wszystkie pliki php w katalogu. Drugi parametr jest wtedy uznawany za katalog, stąd pretensje systemu.

Edit : Właściwie jest kilka sposobów na zrobienie tego, ja na początku wylistowałbym wszystkie nazwy plików do pliku tekstowego, a potem zamieniał plik o nazwie i-tej linijki na i-ty plik php.


(Saver) #3

A mógłbyś mi napisać kod jak to zrobić? :slight_smile:

Bo ja jeszcze w bashu nie jestem dobry :slight_smile:


(Pabloxxl666) #4

Głupio się przyznać, ale mimo tego, że linuxa używam od kilku lat, składni basha nie ogarniam ;p

ls > listaplikow

utworzy plik. Potem

for x in $(cat listaplikow)

przejdzie po wszystkich elementach pliku (tego nie jestem pewien ;p ). Musisz tylko stworzyć sobie nową zmienną i, inkrementować ją wewnątrz pętli (dodawać jeden), i robic coś w stylu mv x $i.php

#!/bin/sh

i=0

for x in $(cat listaplikow) ; do

mv x $i.php

i=i+1

done

Napisz czy działa :slight_smile:


(Saver) #5

Nie działa, po odpaleniu pokazuje:

mv: cannot stat `x': No such file or directory

mv: cannot stat `x': No such file or directory

mv: cannot stat `x': No such file or directory

mv: cannot stat `x': No such file or directory

mv: cannot stat `x': No such file or directory

mv: cannot stat `x': No such file or directory

mv: cannot stat `x': No such file or directory

mv: cannot stat `x': No such file or directory

mv: cannot stat `x': No such file or directory

mv: cannot stat `x': No such file or directory

mv: cannot stat `x': No such file or directory

mv: cannot stat `x': No such file or directory

mv: cannot stat `x': No such file or directory

mv: cannot stat `x': No such file or directory

...

(Pabloxxl666) #6

$x a nie x, mój błąd.


(Saver) #7

Zrobiłem

#!/bin/sh

i=0

for x in $(cat listaplikow) ; do

mv $x $i.php

i=i+1

done

I usnuło mi wszystkie pliki w katalogu :frowning:

Wszystkie pliki zastały nadpisane do 0.php :open_mouth:

Nie martw się odzyskałem pliki :slight_smile:

Może jest inny sposób? :slight_smile:


(marcin82) #8

A musisz to koniecznie w bashu robić? Użyj na przykład KRename, a jeśli masz dostęp do Windows to np. Total Commander -> Narzędzie wielokrotnej zamiany.


(BenderBendingRodriguez) #9

http://linux.die.net/Linux-CLI/mass-rename.html


(Saver) #10

Ale ja mam 876316 plików ._. Najłatwiej i najszybciej zawsze jest w Bashu!

PS. Ja nie mam Windows...

PPS. problem rozwiązany :slight_smile:

#!/bin/bash


k=1


for i in `ls`

do

    if [$0 != $i];

    then

        mv $i "$k.php"

        k=$(($k+1))

    fi

done

(roobal) #11

Można prościej

#!/bin/bash