[+] bash - zamiana wielu nazw plików
: 15 marca 2010, 11:46
Pilnie potrzebna pomoc, a mianowicie. Mam na serwerze około 6000 plików graficznych z tym, że wysyłając je na serwer popełniłem błąd w nazwach.
Wygląda tak
MO1235_17.jpg
Nazwa powinna wyglądać tak:
MO1235-17.jpg <- zawsze 7 znak powinien być myślnikiem, a nie podkreśleniem (po nim występują 2 cyfry np. 17 jak obok lub coś innego)
Proszę o pomoc.
Mam taki skrypt:
Ale zamiast znaku "-" robi mi znak "\".
Rozwiązanie:
Poradziłem sobie - wystarczyło zamienić:
na:
Wygląda tak
MO1235_17.jpg
Nazwa powinna wyglądać tak:
MO1235-17.jpg <- zawsze 7 znak powinien być myślnikiem, a nie podkreśleniem (po nim występują 2 cyfry np. 17 jak obok lub coś innego)
Proszę o pomoc.
Mam taki skrypt:
Kod: Zaznacz cały
[color=#808080][I]# The above script will not work on filenames containing blanks or newlines.[/I][/color]
[color=#808080][I]# Stephane Chazelas therefore suggests the following alternative:[/I][/color]
[color=#000000][B]for[/B][/color] filename [color=#000000][B]in[/B][/color] * [color=#808080][I]# Not necessary to use [color=#C20CB9][B]basename[/B][/color],[/I][/color]
[color=#808080][I]# since [/I][/color][color=#FF0000]"*"[/color] wont [color=#7A0874][B]return[/B][/color] any [color=#C20CB9][B]file[/B][/color] containing [color=#FF0000]"/"[/color].
[color=#000000][B]do[/B][/color] [color=#007800]n=[/color]`[color=#7A0874][B]echo[/B][/color] [color=#FF0000]"$filename/"[/color] | [color=#C20CB9][B]tr[/B][/color] [color=#FF0000]'[_]'[/color] [color=#FF0000]'[-]'[/color]`
[color=#808080][I]# POSIX char [color=#000000][B]set[/B][/color] notation.[/I][/color]
[color=#808080][I]# Slash added so that trailing newlines are not[/I][/color]
[color=#808080][I]# removed by [color=#7A0874][B]command[/B][/color] substitution.[/I][/color]
[color=#808080][I]# Variable substitution:[/I][/color]
[color=#007800]n=[/color]$[color=#7A0874][B]{[/B][/color]n%/[color=#7A0874][B]}[/B][/color] [color=#808080][I]# Removes trailing slash, added above, from filename.[/I][/color]
[color=#7A0874][B][[/B][/color][color=#7A0874][B][[/B][/color] [color=#007800]$filename[/color] == [color=#007800]$n[/color] [color=#7A0874][B]][/B][/color][color=#7A0874][B]][/B][/color] || [color=#C20CB9][B]mv[/B][/color] [color=#FF0000]"$filename"[/color] [color=#FF0000]"$n"[/color]
[color=#808080][I]# Checks [color=#000000][B]if[/B][/color] filename already lowercase.[/I][/color]
[color=#000000][B]done[/B][/color]
[color=#7A0874][B]exit[/B][/color] $?
Rozwiązanie:
Poradziłem sobie - wystarczyło zamienić:
Kod: Zaznacz cały
[color=#000000][B]do[/B][/color] [color=#007800]n=[/color]`[color=#7a0874][B]echo[/B][/color] [color=#ff0000]"$filename/"[/color] | [color=#c20cb9][B]tr[/B][/color] [color=#ff0000]'[_]'[/color] [color=#ff0000]'[-]'[/color]`
Kod: Zaznacz cały
[color=#000000][B]do[/B][/color] [color=#007800]n=[/color]`[color=#7a0874][B]echo[/B][/color] [color=#ff0000]"$filename/"[/color] | [color=#c20cb9][B]tr[/B][/color] [color=#ff0000]'\137'[/color] [color=#ff0000]'\055'[/color]`