2010-04-14 12 views
15

Lorsque j'utilise Cygwin, je copie fréquemment un chemin Windows et édite manuellement toutes les barres obliques au format Unix. Par exemple, si j'utilise Cygwin et le besoin de changer de répertoire J'entre:Comment formater un chemin DOS vers un chemin unix sur la ligne de commande cygwin

cd C:\windows\path 

puis modifier pour

cd C:/windows/path 

(En règle générale, le chemin est beaucoup plus que cela). Existe-t-il un moyen d'utiliser sed, ou quelque chose d'autre pour le faire automatiquement? Par exemple, j'ai essayé:

echo C:\windows\path|sed 's|\\|g' 

mais obtenu l'erreur suivante

sed: -e expression #1, char 7: unterminated `s' command 

Mon but est de réduire la frappe, alors peut-être que je pourrais écrire un programme que je pourrais appeler. Idéalement, je taperais:

conversionScript cd C:/windows/path 

et cela équivaudrait à taper:

cd C:\windows\path 
+0

Votre commande 'sed' devrait être' sed | \\ |/| g' pour éviter cette erreur. –

Répondre

11

Lire sur la commande cygpath.

somecommand `cygpath -u WIN_PATH` 

par exemple.

+0

backticks ont été mangés par la syntaxe markdown. –

1

cmd.exe n'aime pas les guillemets simples. Vous devez utiliser des guillemets

C:\test>echo C:\windows\path|sed "s|\\|/|g" 
C:/windows/path 
27

Merci à tous. Apparemment, tout ce que je besoin sont des guillemets simples autour du chemin:

cd 'C: \ windows \ path'

et Cygwin convertir. Cygpath fonctionnerait aussi, mais il a également besoin des guillemets simples pour empêcher le shell de manger les caractères antislash.

+1

Cela fonctionne également dans mingw32. Génial! – tanascius

1

Vous remplacez-slash par une barre oblique à l'aide unix sed

Ci-dessous j'utilise étoile « * » pour séparer les champs dans de directive

 

    sed "s*\\\*/*g" 

L'astuce consiste à utiliser une barre oblique inverse plus que vous peut penser nécessaire