Pracuję nad konwersją strony internetowej. Pliki, które zostały połączone i dostarczone z serwera WWW, nie rozróżniają wielkości liter. Ale zrobiłem zrzut strony w moim systemie Linux i piszę skrypty do migracji danych. Problem polega na tym, że napotykam problemy z rozróżnianiem wielkości liter między ciągami linków na stronach a rzeczywistą wielkością liter w systemie plików.
Na przykład strona może mieć link taki <a href='/subfolder/PageName.asp'>
, jak w rzeczywistości /subfolder/pagename.asp
. Podobnie z obrazami - <img src='spacer_sm.gif'>
może być Spacer_Sm.gif
.
Myślę więc o zmianie wszystkich katalogów i nazw plików na ich małe odpowiedniki do pobrania strony. Jak to zrobić (i czy może być lepszy sposób?)
Nawet jeśli istnieją komendy unix, które mają przełączniki bez rozróżniania wielkości liter, używam php, więc nie wszystkie komendy systemu plików mają opcje rozróżniania wielkości liter.
źródło
Odpowiedzi:
Nie wiem czy twój uniksowy smak ma
rename
. Wiele Linuksów ma i jest częścią pakietu perla, jeśli szukasz repozytorium.Powyższa wersja z
tak naprawdę nie wykonuje akcji, ale drukuje tylko to, co można zrobić. Pomijasz -n, aby zrobić to naprawdę.
źródło
'y/[A-Z]/[a-z]/'
?rename
jest częściąperl
pakietu, to chyba perl, ale wzorzec jest również używanysed
, a możeAWK
także. Znam tylkosed
ciszę. Tłumaczęy
natranslate
lubmap
, ale nie wiem, skąd pochodzi ta postać.rename
to skrypt perla.Zsh
Objaśnienia:
zmv
zmienia nazwy plików pasujących do wzorca zgodnie z podanym tekstem zastępczym.-o-i
przekazuje-i
opcję każdemumv
polecenia pod maską (patrz poniżej). W tekście zastępczej$1
,$2
itd, są kolejne grupy w nawiasach we wzorcu.**
oznacza rekursywnie wszystkie (pod) * katalogi. Finał(/)
nie jest grupą w nawiasach, ale globalnym kwalifikatorem, który oznacza dopasowanie tylko do katalogów.${2:l}
konwertuje$2
na małe litery.Zmiana nazwy Perla
Tutaj używam skryptu zmiany nazwy Perla, który dostarczają Debian i Ubuntu
/usr/bin/prename
(zwykle również dostępnyrename
). Z uderzeniem ≥4 lub zsh:Z innymi pociskami:
Przenośny
Rekurencyjnie:
Zastosowanie
-depth
zapewnia, że głęboko zagnieżdżone katalogi są przetwarzane przed ich przodkami.źródło
Nie działało w następującej strukturze katalogów:
Oto przykład, który działa:
Aby uzyskać wyjaśnienie
b
ie
zmienne:Następnie użyj następującej sekwencji klawiszy: /,,Enterbb
źródło
Przyjęta odpowiedź nie działała dla mnie, ponieważ próbowała zmienić wszystkie katalogi naraz. Znalazłem inne rozwiązanie na stackexchange bardzo podobne do przenośnego od Gilles powyżej: od Baramina -
/programming/4268591/unix-rename-files-directories-to-uppercase
Skopiowałem to tutaj:
Na które zmieniłem polecenie tr na np .: sed s / cat / dog / g
Wszelkie podziękowania kierowane są do Baramina pod linkiem powyżej
źródło