Jak rekurencyjnie zmieniać nazwy plików / folderów, aby ich nazwy były przyjazne dla systemu Windows?

11

Mam kilka plików na polu Ubuntu, które mają różne znaki w nazwach plików, których Windows nie akceptuje (głównie „:” i „*”, ale prawdopodobnie inne).

Jak najprościej zmienić ich nazwy i przenieść je na komputer z systemem Windows? Można zamienić te znaki na „[dwukropek]” i „[gwiazdka]”.

RomanSt
źródło
1
Powinieneś unikać takich nazw nawet pod Linuksem (szczególnie *).
cyr
4
@cYrus Zależy od sposobu obsługi plików. Wyobrażam sobie, że to tylko problem ze skryptami i powłokami. Jestem na OS X i jedyną zabronioną postacią jest :, co jest wystarczająco złe. Przydatne jest nazywanie dokumentów po ich zawartości, a jeśli nazwa artykułu kończy się pytaniem, nazwa pliku też powinna.
Daniel Beck
@cYrus i ja robimy w moim oprogramowaniu, ale niektóre programy zostały napisane przez ludzi, którzy tego nie robią. Na przykład qmail używa: w prawie każdej nazwie pliku, którą tworzy.
RomanSt
@Daniel Beck: Jasne, ale niestety posiadanie systemu plików obsługującego takie nazwy nie wystarczy, ponieważ można używać programów, które psują całą sprawę. Nawet nie używam spacji.
cyr
2
@ Steven dobre pytanie! Myślę, że Windows byłby nieco bardziej użyteczny, ponieważ może się zdarzyć, że ktoś odbierze pliki w systemie Windows i będzie musiał je naprawić na tej platformie.
Peltier

Odpowiedzi:

4

Spójrz na nazwę Glindra i detox .

Narzędzia do plików Glindra można zainstalować w systemie Windows lub Linux. Przykłady czyszczenia nazw plików w systemie Windows:

rena *.* -portable

rena *.* -safe
  • -safe
    Maps prowadzące myślniki (łączniki) do podkreślenia.
    Zwija spacje.
    Odwzorowuje problematyczne znaki, takie jak * ?: [] "<> | () {}, do podkreślenia.
  • -portable
    Wykonuje te same operacje czyszczenia co -safe, a dodatkowo:
    Odwzorowuje wszystkie 8-bitowe znaki z górnej połowy alfabetu łacińskiego 1 na rozsądne 7-bitowe znaki zastępcze.
    Odwzorowuje znaki pojedynczego cudzysłowu na podkreślenie.

Źródło: Naprawa nazw plików Unix / Linux / POSIX: Znaki kontrolne (takie jak Newline), Wiodące myślniki i inne problemy

Wstrzymano do odwołania.
źródło
Ta strona pokazuje 404. Kopia w pamięci podręcznej Google .
Daniel Beck
To jeden niesamowity rant Davida Wheelera! Zwłaszcza po tym, jak właśnie uderzyłem klawiaturę po próbie cd do katalogu o nazwie JungleDisk o nazwie „~ \ irina”. Chcesz zgadnąć, czy działało na nim uzupełnianie tabulatorów? ...
RomanSt.
1
Detox służy do tworzenia plików Windows przyjaznych dla Uniksa, a nie na odwrót.
endolith,
3
@DennisWilliamson - Wygląda na to, że glindra (dla systemu Windows) nie może zmieniać nazw znaków o niepoprawnych nazwach plików. G:\spc>rena.exe -safe -portable *.txtwyniki[FATAL-ERROR] Filename syntax error: aa:a.txt
Steven
1
Zwróć uwagę na zmianę składni, kiedy przechodzisz do Linuksa rena '*.*' -portable, a jeśli chcesz, aby rekurencyjne, użyj czegoś takiego jak rena '***/*.*' -portablena Linuksie. Uważam, że zmiana nazwy powinna nastąpić w systemie Linux, a nie w systemie Windows.
holroy
4

Spróbuj Recuva .

Jest to jedyne narzędzie systemu Windows, które znalazłem, które obsługuje nazwy plików inne niż Windows.

Włącz skanowanie w poszukiwaniu nieusuniętych plików (w celu odzyskiwania z uszkodzonych lub sformatowanych dysków) i przeskanuj swój folder. Podczas przywracania włącz opcję Przywróć strukturę folderów . Recuva skutecznie „skopiuje” cały katalog do innej lokalizacji, „santitizing” nieprzyjazne nazwy plików.

Steven
źródło
1

Nie będąc w systemie Linux i bez testowania czegokolwiek, wierzę, że można użyć jedno-liniowych, takich jak te poniżej.

Aby zmienić jeden znak:

find . -type f -exec rename 's/:/\[colon\]/g' {} +
find . -type f -exec rename 's/\*/\[asterisk\]/g' {} +

I na koniec, aby usunąć wszystkie znaki niealfanumeryczne:

find . -type f -exec rename 's/[^A-Za-z0-9._]//g' {} +
harrymc
źródło
Należy pamiętać, że należy to rozszerzyć o wszystkie inne nielegalne znaki systemu Windows, tj.<>:"/\|?*
holroy
0

Jeśli pliki znajdują się już na woluminie NTFS, wydaje się, że uruchomienie programu chkdisk w systemie Windows „rozwiązuje” problem. Niestety wydaje się, że robi to poprzez usunięcie szkodliwych plików.

Peltier
źródło
0

Udało mi się to dzięki kombinacji dwóch pierwszych odpowiedzi plus pyRenamer (GUI). Pod Linuksem użyłem pyRenamer do zwinięcia spacji w nazwach folderów (katalogów) - zastępując spację niczym - aby inne programy (zmiana nazwy Glindra) działały rekurencyjnie (można było wstawić podkreślenia). Z plików wyjąłem także znaki lub słowa dopuszczalne w systemie Windows, aby zaoszczędzić miejsce, i podobnie zwinięte spacje w nazwach plików. Następnie uruchomiłem Renę, aby usunąć znaki inne niż Windows, zapisane na dysku flash, a następnie użyłem Recuva do „przywrócenia” folderu w systemie Windows. Recuva wskazuje, czy ścieżka do pliku jest za długa (i usuwa również znaki inne niż Windows). Nie znalazłem jeszcze narzędzia, które sprawdza ścieżkę nazw plików, aby sprawdzić, czy są one poniżej maksymalnego limitu systemu Windows wynoszącego 255 (lub powiedz 240, aby dać trochę swobody).

Vitex
źródło