9
votes

Échapper les barres backslash dans des chemins Windows passés à des programmes UNIX

J'essaie d'échapper aux backslashes en cygwin, mais il semble presque impossible J'ai essayé beaucoup de choses, mais personne ne fonctionne bien .. xxx

plus précisément, j'ai besoin d'obtenir une commande pour recevoir une entrée dans BASH sans Perdre les caractères de barre oblique inverse. Chaque fois que j'essaie de passer un argument, Les backslashes disparaissent toujours, détruisant mon intrant. Et je ne sais pas Comment puis-je lui dire de laisser simplement les backslashes sur l'entrée seule.

J'ai essayé ce qui suit, mais non plus de travail xxx

d'ailleurs, je veux pouvoir taper c: \ users \ ted \ music \ Enigma sans devis. Un de ces alias fonctionne lors de l'utilisation de citations.

TED


2 commentaires

J'ai eu le même problème. Je voulais exécuter "dir / b / s * .txt" pour obtenir un ensemble de noms de fichiers, puis les tuyer à Xargs pour le traitement, mais la sortie Backslash de la commande Windows Dir n'a pas joué bien avec Xargs. À la fin, j'ai utilisé "Trouver" -Name * .txt "à la place, qui utilise des esclaves avant. (J'utilise Xargs et trouvez depuis le package Cygwin, mais dans une coquille Windows CMD.)


Définissez l'option x pour voir exactement comment Bash munisse vos chaînes. Il suffit d'émettre SET -X .


6 Réponses :


17
votes

Veuillez lire la section intitulée citating à bash (1) ( homme bash code>).

Dans votre premier exemple, P>

cygpath C:/Users/Ted/Music/Enigma


1 commentaires

Intéressant, le problème est que je voudrais vraiment pouvoir coller des chemins Windows dans la ligne de commande comme ils sont. Si je voulais avoir les barres à barres au lieu des backslashes, je devrais les changer moi-même en quelque sorte. Quoi qu'il en soit, merci pour votre aide.



5
votes

J'ai eu un problème similaire lors de la lecture d'un chemin de Windows Explorer collé dans la ligne de commande: xxx

la commande "lecture -r xyz" (avec arg. "-r") ne fait pas Interprète les barres obliques simples dans le chemin collé. xxx

vittorio


0 commentaires

6
votes

Parfois, il est utile de donner des manuels des programmes utilisés :-). De man xargs : xxx

Cette option préserve en effet la ligne entière de même. Essayez: xxx

le "-0" le fait pour vous!

Notez que pour plus d'une ARG, vous devez zéro-terminer les arguments, car Exemple de Rechercher ... -Print0 ou grep ... --NULL .


3 commentaires

Vos backslashes seront supprimés avant que la corde ne soit jamais sur Xargs.


@Bobbogo Votre observation a été correcte pour la réponse originale, mais je pense que c'était juste une surveillance. L'idée d'utiliser -0 est très utile (et j'avais oublié que l'option conserve tous les caractères spéciaux ), j'ai donc pris la liberté pour résoudre l'erreur que vous avez souligné afin de rendre la réponse plus utile comme un plan.


Je perdais mon esprit en train de déboguer pourquoi je ne pouvais pas obtenir sed pour convertir des choses jusqu'à ce que cela m'a montré que c'était le dernier xarg qui manglait des choses. Son moins sur la lecture du manuel est davantage de ne pas traiter chaque partie de la commande qui ne fonctionne pas avec une suspicion égale.



2
votes

J'ai eu le même problème, lors de la conversion de noms de fichiers tels que C: \ Dirname vers UNIX en utilisant CYGPATH, je reçois C: Dirname et même Wheir Stuff.

se révèle, cependant, que mon problème était les noms de fichiers que j'utilisais étaient entrés par les utilisateurs que je récupère avec la commande "Lecture". La lecture, pas la cygpath, causait mes problèmes en lançant la barre oblique inverse. "Lire -r" corrige le problème.


0 commentaires

2
votes

Essayez: xxx pré>

xargs -0 fort> option explication (de gnu.org ): p>

" Les noms de fichier d'entrée sont terminés par un caractère null au lieu de blancheur. et toutes les guillemets et les caractères de barre oblique inverse ne sont pas considérés comme spéciaux (chaque caractère est pris littéralement). Désable à la chaîne de fin de fichier, qui est traitée comme tout autre argument. " EM> P> P> P> P> P> P> P> P >

Vous pouvez également y parvenir avec Sed : P >

 echo C:\\Users\\Ted\\Documents\\Unix\\Scripts | xargs echo


0 commentaires

4
votes

Je reconnais que cette réponse est assez tardive à la fête ... mais je suis tombé sur cette question tout en ayant le même problème moi-même.

J'utilisais "Xargs" à partir d'une installation Cygwin - et je l'appelle à partir d'un CMD.EXE ordinaire shell.

Pour moi, j'ai simplement utilisé l'utilitaire tr dans le dossier Cygwin:

dir / b / s / a * .txt | tr "\\" "/" | Xargs ...

Cela a complètement résolu mon "problème de barres à barres".


0 commentaires