Jak zmienić nazwę grupy plików z czymś, co wygląda jak ścieżka do pliku Windows w ich nazwach

8

Mam paczkę plików z nazwą pliku pomieszaną. Wszystkie nazwy plików mają ten sam początek, który wydaje się być katalogiem plików systemu Windows. Problem polega na tym, że istnieje ponad 700 plików i naprawdę nie chcę ich przechodzić i ręcznie zmieniać ich nazw. Oto przykłady nazw plików (uwaga: żadna z nich nie ma katalogów plików):

G:some\really\long\file\path\then\the\name1.jpg
G:some\really\long\file\path\then\the\name2.png
G:some\really\long\file\path\then\the\filename.txt
G:some\really\long\file\path\then\the\file_name.mov
...

Ważne, że każdy plik ma G:some\really\long\file\path\then\the\ przed nazwą pliku, który chciałbym.

Tak więc chciałbym, aby powyższe pliki wyglądały tak:

name1.jpg
name2.png
filename.txt
file_name.mov

Próbowałem polecenia rename i nie udało się. Nadal jestem nowy w Linuksie i naprawdę nie jestem pewien, jak to zrobić, czy naprawdę, co google. Każda pomoc będzie doceniona.

    
zadawane kingcobra1986 24.08.2017, 07:04
źródło

3 odpowiedzi

18

Właśnie usunąłem wszystko do ostatniego ukośnika odwrotnego za pomocą rename

$ rename -n 's/.*\//' G*
rename(G:some\really\long\file\path\then\the\file_name.mov, file_name.mov)
rename(G:some\really\long\file\path\then\the\filename.txt, filename.txt)
rename(G:some\really\long\file\path\then\the\name1.jpg, name1.jpg)
rename(G:some\really\long\file\path\then\the\name2.png, name2.png)

Usuń -n po testowaniu, aby zmienić nazwy plików.

Notatki

  • -n nic nie robi, wystarczy wydrukować, co się zmieni
  • s/old/new zamień old na new
  • .* dowolna liczba dowolnych znaków
  • \ Pierwszy ukośnik odwrotny ma uciec z drugiego.
  • Ponieważ wyrażenie regularne jest zachłanne, to wyrażenie .*\ zjada również wszystkie poprzednie odwrotne ukośniki.
  • Ponieważ ostatnie dwa ograniczniki // są puste, wszystkie elementy pasujące do szukanej części są usuwane
odpowiedział Zanna 24.08.2017, 07:21
źródło
9

Możesz to zrobić w czystym bash używając rozszerzenia parametrów powłoki .

${file##*\} (przedrostek cut-up-to-last) usuwa wszystko od początku nazwy pliku aż do ostatniego \ .

for file in *; do
    mv -v "$file" "${file##*\}";
done

Rezultaty zmiany nazwy:

‘G:some\really\long\file\path\then\the\file_name.mov’ -> ‘file_name.mov’
‘G:some\really\long\file\path\then\the\filename.txt’ -> ‘filename.txt’
‘G:some\really\long\file\path\then\the\name1.jpg’ -> ‘name1.jpg’
‘G:some\really\long\file\path\then\the\name2.png’ -> ‘name2.png’
    
odpowiedział αғsнιη 24.08.2017, 08:42
źródło
6

Jeśli szukasz rozwiązań GUI , istnieje wiele aplikacji do zmiany nazwy zbiorczej. Sugerowałbym Thunar , który jest domyślnym menedżerem plików dla Xfce. Wyposażony jest w poręczne narzędzie do zmiany nazwy. Możesz zainstalować Thunara, uruchamiając następujące polecenie w Terminalu:

sudo apt-get install thunar

Prawdopodobnie będziesz w stanie zainstalować także z Ubuntu Software.

Jak korzystać z narzędzia

  1. Po zainstalowaniu Thunara uruchom narzędzie Luzem Rename .
  2. Kliknij ikonę + i dodaj pliki, których nazwę chcesz zmienić.
  3. Kliknij pole rozwijane tuż pod listą wybranych plików i wybierz Wyszukaj & amp; Wymień .
  4. W polu Wyszukaj: wpisz G:some\really\long\file\path\then\the\ (część, której chcesz się pozbyć), pozostaw puste pole Zamień na: . Powinieneś zobaczyć podgląd zmian w kolumnie Nowa nazwa .
  5. Aby zastosować zmiany, kliknij przycisk Zmień nazwy plików .

Poza Wyszukaj & amp; Zamień to narzędzie obsługuje następujące akcje:

  • Wstaw datę / godzinę
  • Wstawianie / zastępowanie
  • Numeracja
  • Usuń znaki
  • Duże / małe litery
odpowiedział pomsky 24.08.2017, 07:24
źródło

Przeczytaj inne pytania na temat tagów