L'achèvement de l'onglet Bash devrait être en mesure de faire la bonne chose ici si vous tapez mv 90843_O
et appuyez sur tab. Sinon, une façon d'échapper correctement le nom est:
mv "90843_O\\\\'ConnorPaul_GeneralManager.jpg" dest.jpg
Les guillemets doubles suppriment la nécessité d'échapper à la '
, mais les deux caractères de barre oblique inverse doivent toujours être échappés (une barre oblique inverse supplémentaire pour chacun fait quatre barres obliques inverses). Une autre option est:
mv '90843_O\\'\'ConnorPaul_GeneralManager.jpg dest.jpg
Ici, mettre les barres obliques inverses entre guillemets supprime la nécessité de les échapper, mais vous devez mettre fin aux guillemets simples pour ajouter un littéral '
. Ceci est échappé après la fin des guillemets.
Notez que le problème ici est autant lié à la présence de barres obliques inversées dans le nom qu'à la citation unique. Pour remplacer la \\'
séquence (puisqu'il y a deux barres obliques inverses dans le nom de fichier dans la question, les deux causeront des problèmes) avec un trait de soulignement pour tous les fichiers d'un répertoire utilisant une boucle:
for file in *"\\\\'"*; do
mv -i "$file" "${file//"\\\\'"/_}"
done
Le -i
fera l' mv
invite si des fichiers seront écrasés. Utilisation prename
( rename
liens vers ceci sur de nombreux systèmes):
prename -n 's:\\\\'\'':_:g' *"\\\\'"*
Retirez-le -n
lorsque vous êtes satisfait qu'il fait ce que vous voulez. Notez que les caractères de barre oblique inverse doivent être échappés à l'intérieur de l'expression perl ici, même s'il y a des guillemets simples autour d'eux (sans les guillemets simples, vous auriez besoin de huit barres obliques inverses car quatre seraient supprimées par le shell et ne feraient pas partie de l'expression perl).
vidir
c'est une solution simple à ce genre de problèmes.