# [BASH] Skrypt do zmiany nazw wielu plików

## Garrappachc

Witam.

Na dysku mam katalog z tapetami. Gdzieś tak koło 500-600 tapet. Mają one różne nazwy (ściągane są z internetu, więc sami rozumiecie, nazwy są czasami bardzo dziwne). Teraz chciałbym żeby zmienić nazwę każdego pliku, aby po pierwsze miał kolejną liczbę, a po drugie nie miał rozszerzenia - bo skoro mam linuksa, to co dla mnie znaczy różnica miedzy jpg a png? Czyli zamiast nazw xxxxx.jpg, yyyyy.png, były nazwy 1, 2, etc. I robiłem już parę skryptów w bashu do zmiany nazw kilku plików, ale te miałem zdefiniowane. I tu moje pytanie. Jak wczytać listę plików w danym katalogu do tablicy w bashu? Bo potem już z górki. Proszę o pomoc.

----------

## znal

Można zrobić np. tak:

```
let i=0

find . -type f -printf "%f\n" | (while read plik

do

        mv $plik $i

        let i++

done)
```

----------

## Garrappachc

Hm... Dzięki. Właśnie rozwaliłeś mi połowę systemu ^^

Sam to rozwiązałem skryptem, którego teraz nie pokażę, gdyż nie odpala mi się żaden menedżer plików (nawet konsola). Problem mam z plikami, które mają spację w nazwie - polecenie ls, którym się wspomogłem przy tworzeniu tabeli nie uzupełnia ich blackslashem... Apostrofy nic tu nie dają.

----------

## soban_

 *Garrappachc wrote:*   

> Hm... Dzięki. Właśnie rozwaliłeś mi połowę systemu ^^
> 
> Sam to rozwiązałem skryptem, którego teraz nie pokażę, gdyż nie odpala mi się żaden menedżer plików (nawet konsola). Problem mam z plikami, które mają spację w nazwie - polecenie ls, którym się wspomogłem przy tworzeniu tabeli nie uzupełnia ich blackslashem... Apostrofy nic tu nie dają.

 

Proponuje backup przywrocic jesli takowy masz - bo chyba to jakas grubsza sprawa jest.

----------

## Garrappachc

Nie mam... Kurczę. żadna aplikacja mi się nie otwiera. Dobrze, że zostawiłem sobie otwartą konsolę i przeglądarkę. Kiedy odpalam cokolwiek, wywala mi (obojętnie czy z roota czy ze zwykłego usera):

```
[root][garrappachc] # thunar

No protocol specified

Thunar: Nie można otworzyć ekranu: 

[root][garrappachc] # chromium

No protocol specified

(chrome:17983): Gtk-WARNING **: cannot open display: :0.0

[root][garrappachc] # 
```

Boję się zrestartować system... Emege thunar też nie pomogło...

----------

## SlashBeast

chyba nie odpaliles tego skryptu w katalogu domowym? Oczywiscie w jakims podkatalogu to robiles? Stawiam na 'brak' .Xauthority czyli po... rename jest.

----------

## Garrappachc

Niee... Odpaliłem to w katalogu ~/Obrazy/Tapety. Właśnie zauważyłem, że pozmieniało mi nazwy plików w katalogu głównym. Jakieś cyfry... A co otwieram to jakiś .conkyrc, .Xdefaults... A w podkatalogach nic nie pozmieniało. Podeślijwa mi swój .Xauthority, żebym miał do czego porównać. Proszę.

EDIT: Udało się, przywróciłem .Xauthority, wsio wróciło do normy (tylko configi mam pod innymi nazwami, ale to się będzie systematycznie uzupełniało). Wracając do sedna problemu - jak zrobić ten skrypcik?

----------

## znal

Dziwne, u mnie działa prawidłowo, przesuwa pliki tylko w bieżącym katalogu:

```
znal@znal ~/test $ ls

znal@znal ~/test $ touch a b c d e

znal@znal ~/test $ let i=0

znal@znal ~/test $ find . -type f -printf "%f\n" | (while read plik

> do

>         mv $plik $i

>         let i++

> done)

znal@znal ~/test $ ls

0  1  2  3  4

znal@znal ~/test $ ls /

bin   dev  home  lost+found  opt   root  sys  usr

boot  etc  lib   mnt         proc  sbin  tmp  var
```

EDIT: Chyba wiem, co mogło być przyczyną. Jeśli w nazwach plików były np. spacje, to rzeczywiście wtedy nie działa prawidłowo i trzeba umieścić $plik w cudzysłowach "$plik"

Sorki za problem   :Embarassed: 

----------

## soban_

 *Garrappachc wrote:*   

> Niee... Odpaliłem to w katalogu ~/Obrazy/Tapety. Właśnie zauważyłem, że pozmieniało mi nazwy plików w katalogu głównym. Jakieś cyfry... A co otwieram to jakiś .conkyrc, .Xdefaults... A w podkatalogach nic nie pozmieniało. Podeślijwa mi swój .Xauthority, żebym miał do czego porównać. Proszę.
> 
> EDIT: Udało się, przywróciłem .Xauthority, wsio wróciło do normy (tylko configi mam pod innymi nazwami, ale to się będzie systematycznie uzupełniało). Wracając do sedna problemu - jak zrobić ten skrypcik?

 

Moze zrob na przyszlosc backupa, zebys nie musial znowu przechodzic nerwowego utrzymywania linuxa przy zyciu bo po reboocie moze byc problem  :Smile: 

----------

## Garrappachc

Ja tam się nie denerwuję, bo nie bawię się w "pierdółki" na co dzień. Zresztą, mam blisko 90 GB danych...

Mój skrypcik wygląda tak:

```
#!/bin/bash

tablica=(`ls /home/garrappachc/Obrazy/Tapety/`)

ilosc=${#tablica[@]}

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

   mv "/home/garrappachc/Obrazy/Tapety/${tablica[$i]}" "/home/garrappachc/Obrazy/Tapety/$i" && echo ${tablica[$i]}

done
```

I jak teraz zrobić, by się nie wkurzał o pliki, w których jest spacja?

----------

## SlashBeast

Najlepiej nie miec spacji w plikach, to tylko proszenie sie o problemy. Jest taka sprytna aplikacja w portage, detox sie nazywa.

----------

## BeteNoire

Ja bym to rozwiązał przy pomocy Krename i nie byłoby żadnych problemów.

Jeśli KDE za bardzo ciąży to jest lżejszy program - GPrename : http://pastebin.com/d5e81aabe

----------

