2013-08-25 8 views
8

Mam liczbę plików, które kończą się w „.1' , na przykład:Jak zmienić nazwę wielu plików z jednego rozszerzenia na inny w systemie Linux/Unix?

example.file.ex1.1 
example.file.ex2.1 
example.file.ex3.1 

Czy istnieje sposób, że mogę szybko zmienić nazwę je wszystkie bez” .1' na końcu (np przykładem .file.ex1, example.file.ex2 itd.)?

Dzięki!

+3

To pytanie wydaje się być off-topic, ponieważ jest bardziej odpowiedni dla Unix i Linux [] (http://unix.stackexchange.com/) –

+0

Wszystkie wielkie odpowiedzi. Dzięki! – user2716340

+2

Próbowałem, ale najwyraźniej nie mam wystarczająco "reputacji". =) – user2716340

Odpowiedz

5

Czysta rozwiązanie bash:

for curFile in example.file.*.1; do 
    mv -- "$curFile" "${curFile:0:-2}" 
done 
12

Tak, spróbuj tego z rename:

rename -n 's/\.1$//' * 

usunąć -n (przełącznik trybu pracy na sucho), jeśli badania są ważne.

warning http://pix.toile-libre.org/upload/original/1377510865.pngIstnieją inne narzędzia o tej samej nazwie, które mogą lub nie mogą być w stanie to zrobić, więc należy być ostrożnym.


Jeżeli uruchomić następujące polecenie (linux)

$ file $(readlink -f $(type -p rename)) 

i masz wynik jak

.../rename: Perl script, ASCII text executable 

wtedy to wydaje się być właściwym narzędziem =)

Jeśli nie, aby to domyślne (zazwyczaj już ma miejsce) i na Debian pochodna jak Ubuntu:

$ sudo update-alternatives --set rename /path/to/rename 

Last but not least, narzędzie to zostało pierwotnie napisany przez Larry'ego Walla, tata na Perl.

+0

Czy możesz wyjaśnić, dlaczego domyślne "zmiana nazwy" nie działa w systemie Ubuntu lub w Debianie? Wygląda na to, że uruchamiasz ''/usr/bin/rename -n 's/.1 //' * '' działa dla mnie, a domyślna zmiana nie działa. Po prostu tego nie rozumiem, oba pozwalają na wyrażenia perla, ale jeden działa, a drugi nie. Jaka jest różnica? –

+0

Domyślna zmiana nazwy powinna działać na Ubuntu/Debian –

+0

Tak! Masz rację. Mój zły –

3

Innym rozwiązanie wykorzystujące parameter expansion:

for curFile in example.file.*.1; do 
    mv "$curFile" "${curFile%.1}" 
done 
+0

Dzięki! Działa: f = plik.zip; echo $ {f% .zip} # -> plik –

Powiązane problemy