Jak przenosić liczby w nazwach plików podczas operacji zmiany nazwy partii?

13

Próbowałem wymyślić, jak zmienić nazwę plików w ciągu ostatnich kilku godzin.

Mam 2000 plików, które są takie:

file.1.pdb
file.2.pdb
file.3.pdb

Chciałbym zmienić nazwę tych plików na coś takiego:

file.pdb.1
file.pdb.2
file.pdb.3
użytkownik 812758
źródło
Nie miałeś na myśli bash ?
avazula
4
@avazula Nie, proszę przeczytać ten artykuł: en.wikipedia.org/wiki/Batch_renaming
Ali Razmdideh
@PerlDuck tak;)
Ali Razmdideh
2
Hej, bliscy wyborcy - czy naprawdę wszyscy myślicie, że potrzebujemy tylko jednego pytania w tagu [batch-rename]? Czy w łączonym poście jest coś, co faktycznie pomaga w wykonaniu zadania w tym pytaniu, poza pomysłem użycia rename? Wydaje mi się, że jeśli pytanie o zmianę nazwy partii ma określone szczegóły, powinniśmy po prostu udzielić konkretnych odpowiedzi na to pytanie .
Zanna

Odpowiedzi:

15

Jeśli masz renamezainstalowany, możesz użyć

rename -n 's/(\.\d+)\.pdb$/.pdb$1/' *.pdb   # just watch what WOULD happen
rename    's/(\.\d+)\.pdb$/.pdb$1/' *.pdb   # actually rename the files

Polecenie renamemożna zainstalować za pośrednictwem

sudo apt install rename
PerlDuck
źródło
11

Dzięki mmv(zmiana nazw wielu plików według wzorów wieloznacznych) jest to łatwe:

mmv '*.*.*' '#1.#3.#2' *.pdb

lub zmvz zshmuszli; to moduł pozwalający na zmianę nazwy; patrz Przykłady ZMV :

zmv -w '*.*.*' '$1.$3.$2' *.pdb
αғsнιη
źródło
3
Oba mmvi zmvwydają mi się raczej egzotyczne. Czy masz coś przeciwko opracowaniu, czym one są i co robią?
PerlDuck
2
Dodałem linki do ich strony podręcznika i przykładów.
αғsнιη
mmvjest całkiem fajne. Wydaje się, że lepiej nadaje się do tego rodzaju zmiany nazwy rename, choć jest mniej elastyczny pod względem dopasowywania nazw.
JAB
11

Za pomocą Perla rename:

rename -n 's/(\.\d+)(\.pdb)/$2$1/' *.pdb

Szybkie wyjaśnienie:

  • *.pdbDopasuj wszystkie pliki, które kończą się .pdb. (Wykonane przez powłokę)
  • (\.\d+)Dopasuj literalną kropkę, a następnie jedną lub więcej cyfr dziesiętnych. Pareny tworzą grupę dopasowania.
  • $2$1 Odwróć pierwszą i drugą grupę meczów.
  • -nBrak akcji (symulacja). Jeśli wynik wygląda dobrze, uruchom komendę ponownie bez tej flagi.
wjandrea
źródło
1
LOL. Ta sama myśl. Byłeś 48 sekund szybciej.
PerlDuck
1
@PerlDuck Lol, tak, ta sama myśl. Odpowiedzi też dość dobrze się uzupełniają: pokrywasz instalację, ja składnię.
wjandrea
7

Możesz użyć tego skryptu:

for i in `seq 1 2000`; do
mv file.$i.pdb file.pdb.$i
done

Lub to przyjazne polecenie kopiuj-wklej:

for i in `seq 1 2000`; do mv file.$i.pdb file.pdb.$i; done

Aby użyć powyższych poleceń, umieść wszystkie 2000 plików w jednym folderze, a następnie otwórz terminal w tym katalogu, a następnie uruchom w nim powyższe polecenie.

Ali Razmdideh
źródło
5

Ostatnio nautilus, domyślny menedżer plików, otrzymał okno dialogowe zmiany nazwy partii. Nie ma jeszcze wystarczającej mocy, aby robić to, co chcesz. Ale na szczęście istnieje Thunar, alternatywny menedżer plików, który można zainstalować. W oknie dialogowym zmiany nazwy Thunars możesz robić, co chcesz, używając GUI.

Najpierw zainstaluj Thunar:

sudo apt install thunar

Uruchom Thunar, przejdź do katalogu z plikami. Następnie wybierz je wszystkie. Prasa F2.

W otwartym oknie dialogowym ponownie wybierz wszystkie pliki. Zmień tryb na „Wyszukaj i zamień” oraz na „Nazwa i sufiks”. Zaznacz „Wyrażenie regularne”. Teraz użyj następujących poleceń jako wzorców wyszukiwania i zamiany:

file\.(.+)\.pdb

i

file.pdb.$1

Na koniec kliknij przycisk zmiany nazwy.

Zaletą tego sposobu jest to, że masz wizualny podgląd tego, co się stanie, zanim faktycznie zmienisz nazwę.

okno dialogowe zmiany nazwy Thunar

Sebastian Stark
źródło
1
Możesz sprawić, aby większość programów drukowała angielskie wiadomości, poprzedzając polecenie LC_MESSAGES=POSIX, np LC_MESSAGES=POSIX free. Działa tak samo w przypadku aplikacji graficznych, chociaż w przypadku aplikacji trwałych, takich jak Nautilus w jego domyślnej konfiguracji, należy najpierw zakończyć poprzednią instancję nautilus -q.
David Foerster
@DavidFoerster dziękuję za wzmiankę, obraz został zastąpiony.
Sebastian Stark
3

Możesz do tego użyć renamez util-linux(polecenie nazywa się rename.ulw Ubuntu):

rename.ul .pdb '' *
rename.ul "file." "file.pdb." *

To najpierw usuwa .pdbprzedłużenie z końca, a następnie ponownie wstawia je na środku.

użytkownik 812791
źródło
1
Całkiem fajne. Nie byłam tego świadoma rename.ul. Składnia jest nieco ... hmm, nieoczekiwana, ale w rzeczywistości działa tak, jak się reklamujesz. Plus: ma również -nprzełącznik (nie dotykaj, po prostu powiedz).
PerlDuck