Kiedy kopiuję pliki z partycji ext3 na fat32 przy użyciu cp:
cp -R /ext3/stuff /fat32/partition/
Otrzymuję nieprawidłowe komunikaty argumentów dla wszystkich plików z dwukropkami i znakami zapytania w.
Czy jest jakiś sposób, aby cp usunął nieprawidłowe znaki dla docelowego systemu plików?
edycja: ponownie sprawdziłem opcje cp i chyba że jestem głupi, nic tam nie ma. Jestem pewien, że mógłbym napisać skrypt, ale wydaje się, że powinno być czystsze rozwiązanie!
źródło
Na podstawie postu Gillesa przetestowałem następującą listę:
Próbowałem skopiować to na kartę MicroSDHC telefonu z systemem Android z systemem plików vfat i dopracować
pax
polecenie, aż wszystko zadziałało. To może wciąż nie wystarczyć dla Windows i Unicode:Możesz także skorzystać z opcji -k, aby upewnić się, że nie ma żadnych nadpisań (z powodu kolizji w nazwach plików). Obie listy, które podałem w komentarzu, różniły się od zachowania vat w systemie Linux.
źródło
Otrzymałem „Nieprawidłowy argument” podczas kopiowania za pomocą źródła USB cp -r i odkryłem, że przyczyną jest nazwa pliku źródłowego kończąca się spacją. Usunięcie spacji wyczyściło komunikat. Plik o niepoprawnej nazwie stał się BTW w tym przypadku w katalogach programów pocztowych.
źródło
Po prostu musiałem to zrobić i chociaż
pax
odpowiedź oparta na podstawie była dobra, wciąż napotykała problemy z akcentowanymi postaciami.Uznałem więc, że jest prostszy w użyciu
tar
i zamienia wszystkie niedozwolone znaki na podkreślenia:Niewątpliwie można wymyślić lepszą listę dozwolonych znaków niż powyższa, ale to działa.
źródło
Po przeczytaniu odpowiedzi na to bardzo interesujące pytanie i przeprowadzeniu eksperymentów z kartą SD dla Androida (exfat) i samochodowym systemem rozrywki (vfat), wymyśliłem ten mały skrypt bash.
Bierze miejsce docelowe (punkt montowania) jako argument i służy
find
do lokalizowania wszystkich plików w moim repozytorium muzycznym.Dla każdej ścieżki pliku oblicza ścieżkę docelową i nazwę pliku, poprzedzając miejsce docelowe i zastępując każdy znak obrażający znakiem podkreślenia
_
. Używam białą listę znaków (litery, cyfry,-
,/
,.
,.
(
,)
I_
), aby usunąć niechciane znaki interpunkcyjne.W zależności od ustawień regionalnych pozostawi to litery akcentowane w ścieżce i nazwie pliku, co wydaje się odpowiednie dla nowoczesnych systemów plików FAT, jak się wydaje.
Dla każdej ścieżki i nazwy pliku docelowego katalogi są tworzone w razie potrzeby za pomocą
mkdir -p
, a następnie plik jest kopiowany, chyba że już istniał.Zanotuj
"
znaki cudzysłowu w różnych miejscach, są one wymagane, aby ścieżki i nazwy ze spacjami nie rozpadały się.źródło