Lorsque je copie des fichiers d'une partition ext3 vers une partition fat32 en utilisant cp:
cp -R /ext3/stuff /fat32/partition/
J'obtiens des messages d'argument invalides pour tous les fichiers avec des deux-points et des points d'interrogation.
Existe-t-il un moyen d'obtenir que cp supprime les caractères non valides pour le système de fichiers cible?
edit: J'ai vérifié à nouveau les options de cp, et à moins que je sois stupide, il n'y a rien là-dedans. Je suis sûr que je pourrais écrire un script, mais il semble qu'il devrait y avoir une solution plus propre!
la source
Sur la base d'un article de Gilles, j'ai testé la liste suivante:
J'ai essayé de copier cela sur la carte MicroSDHC du téléphone Android avec le système de fichiers vfat et la
pax
commande affinée jusqu'à ce que tout fonctionne. Cela peut ne pas être suffisant pour Windows et Unicode:Vous pouvez également utiliser l'option -k pour vous assurer qu'il n'y a pas d'écrasements (en raison de collisions dans les noms de fichiers). Les deux listes que j'ai données dans le commentaire étaient différentes du comportement vfat de Linux.
la source
J'ai reçu l '"argument non valide" lors de la copie avec la clé USB cp -r source et j'ai découvert que la cause était un nom de fichier source se terminant par un espace. La suppression de l'espace a effacé le message. Le fichier avec un nom incorrect s'est produit dans ce cas BTW dans les répertoires du programme de messagerie.
la source
J'avais juste besoin de faire cela, et bien que la
pax
réponse basée sur soit bonne, elle rencontrait toujours des problèmes avec les caractères accentués.J'ai donc trouvé plus simple à utiliser
tar
et à remplacer tous les caractères non autorisés par des traits de soulignement:Il est sans doute possible de proposer une meilleure liste de caractères autorisés que celle ci-dessus, mais cela fonctionne.
la source
Après avoir lu les réponses à cette question très intéressante et fait quelques expériences avec la carte SD pour Android (exfat) et un système de divertissement automobile (vfat), je suis venu avec ce petit script bash.
Il prend la destination (point de montage) comme argument et utilise
find
pour localiser tous les fichiers dans mon référentiel musical.Pour chaque chemin de fichier, il calcule un chemin de destination et un nom de fichier en ajoutant la destination et en remplaçant tout caractère incriminé par un trait de soulignement
_
. J'utilise une liste blanche de caractères (lettres, chiffres,-
,/
,.
,.
(
,)
Et_
) pour enlever toute ponctuation non désirée.Selon les paramètres régionaux, cela laissera des lettres accentuées dans le chemin et le nom de fichier, ce qui est OK pour les systèmes de fichiers FAT modernes, comme il semble.
Pour chaque chemin et nom de fichier de destination, les répertoires sont créés selon les besoins à l'aide de
mkdir -p
, puis le fichier est copié, sauf s'il existait déjà.Notez les
"
caractères de citation à divers endroits, ils sont nécessaires pour empêcher les chemins et les noms avec des espaces de se séparer.la source