Portál AbcLinuxu, 7. května 2025 22:01

Dotaz: bash script - prejmenovani souboru

8.1.2016 21:45 petrfm | skóre: 23
bash script - prejmenovani souboru
Přečteno: 613×
Odpovědět | Admin
Ahoj, prosim o pomoc, potreboval bych udelat script, ktery prida prefix ke vsem obrazkum v adresari. Nasel jsem tohle :
for f in $(find . -name '*.jpg'); do mv "$f" "$(dirname "$f")/prefix_$(basename "$f")"; done
Potreboval bych to upravit tak, aby to fungovalo na vice pripon, t.j. jpg, jpeg, gif, atd a aby prefix bylo jmeno nadrazeneho adresare + znak pomlcky. Mam adresare a123 a124 a125 a v nich jsou ty obrazky. Potrebuju z kazdeho toho adresare spustit ten skript, on by si zjistil ze je v adresari a123 a pridal tedy vsem obrazkum prefix a123-obrazek1.jpg, atd.

Druha moznost je, ze by to proslo ty obrazky abecedne, jak jdou za sebou a prejmovalo je to na a123-1, a123-2,atd. To by bylo jeste lepsi.

Dekuji za pomoc, na bash scripty jsem totalni lama :-( P.
fuck the cola, fuck the pizza, all you need is slivovitza
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

8.1.2016 22:31 vrana
Rozbalit Rozbalit vše Re: bash script - prejmenovani souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
v bashi:
for d in *; do
  cd $d || continue
  i=1
  for f in *; do
    mv $f $d-$((i++))
  done
  cd -
done
8.1.2016 23:04 NN
Rozbalit Rozbalit vše Re: bash script - prejmenovani souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
#!/bin/bash
dir=`basename $PWD`
rename "s/(.*)/$dir-\1/" *.{jpg,jpeg,gif} 2>/dev/null
9.1.2016 08:00 petrfm | skóre: 23
Rozbalit Rozbalit vše Re: bash script - prejmenovani souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Diky moc, panove, integruju si to do cinnosti v KDE a usnadni mi to moc prace.
fuck the cola, fuck the pizza, all you need is slivovitza
9.1.2016 16:43 petrfm | skóre: 23
Rozbalit Rozbalit vše Re: bash script - prejmenovani souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak prvni priklad mi vyhazuje chybu...
petr@T400:~/test/e123$ ./prejmenuj.sh 
./prejmenuj.sh: řádek 3: cd: e123-1.jpeg: není adresářem
./prejmenuj.sh: řádek 3: cd: e123-2.jpeg: není adresářem
./prejmenuj.sh: řádek 3: cd: e123-3.jpeg: není adresářem
./prejmenuj.sh: řádek 3: cd: prejmenuj.sh: není adresářem
petr@T400:~/test/e123$ 

No a ten druhy zase doplni prefix, to funguje super, ale pokud mam obrazky s nazvem A,B,C, atd, slo by udela ,aby je prejmenoval na e123-1, atd? Aby uplne smazal jejich nazev a prepsal je nazvem adresare a -1,-2,-3, atd?
cili mam a.jpg,b.jpg,c.jpg

a chci

e123-1.jpg
e123-2.jpg
atd..
fuck the cola, fuck the pizza, all you need is slivovitza
9.1.2016 20:42 petrfm | skóre: 23
Rozbalit Rozbalit vše Re: bash script - prejmenovani souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak, vyreseno, sice trochu krkolomne, ale funguje :-)

#!/bin/bash
prefix=`basename $PWD`"-"

a=1
for i in *.jpg; do
  new=$prefix$(printf "%01d.jpg" "$a") #04 pad to length of 4
  mv -- "$i" "$new"
  let a=a+1
done



a=1
for i in *.jpeg; do
  new=$prefix$(printf "%01d.jpeg" "$a") #04 pad to length of 4
  mv -- "$i" "$new"
  let a=a+1
done


a=1
for i in *.png; do
  new=$prefix$(printf "%01d.png" "$a") #04 pad to length of 4
  mv -- "$i" "$new"
  let a=a+1
done



fuck the cola, fuck the pizza, all you need is slivovitza
9.1.2016 21:04 petrfm | skóre: 23
Rozbalit Rozbalit vše Re: bash script - prejmenovani souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Kdyby se to někdy někomu hodilo, tak jsem to učesal a doplnil o GTK dialog pro možnost změny tvaru prefixu :-) Do okna se vloží implicitně adresář, ale dá se to snadno přepsat, nebo odklepnout entrem :-)
#!/bin/bash
prefix=`basename $PWD`"-"

prefix=$(zenity --entry --entry-text=$prefix)
retval=$?

case $retval in
0)
echo "Input string is '$prefix'";;
1)
exit;;
esac

# ============================== jpg
a=1
for i in *.jpg; do
  new=$prefix$(printf "%01d.jpg" "$a") #04 pad to length of 4
  mv -- "$i" "$new"
  let a=a+1
done
# ============================== jpeg
a=1
for i in *.jpeg; do
  new=$prefix$(printf "%01d.jpeg" "$a") #04 pad to length of 4
  mv -- "$i" "$new"
  let a=a+1
done
# ============================== png
a=1
for i in *.png; do
  new=$prefix$(printf "%01d.png" "$a") #04 pad to length of 4
  mv -- "$i" "$new"
  let a=a+1
done


fuck the cola, fuck the pizza, all you need is slivovitza
9.1.2016 21:44 petrfm | skóre: 23
Rozbalit Rozbalit vše Re: bash script - prejmenovani souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
ajajaj.... ted jsem si tim hezky rozesral adresarovou strukturu... pustil jsem to nad sambou, kde mam adresare i ve tvaru !!adresar nebo /adresar-tady/!!neco/obrazky/ a krasne mi to prejmenovalo adresare uplne jinde :-(

Asi tomu chybi nejake osetreni tech cest, aby to nebralo vykricnik jako zastupny znak.... No do (_!_), usetril jsem si skriptem praci :-) Ted budu pul hodiny opravovat, brrrrrrrr
fuck the cola, fuck the pizza, all you need is slivovitza

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.