bash - para - Cygwin: utilizando una variable de ruta que contiene una ruta de Windows(con un espacio en ella)
mover todos los archivos de un directorio a otro en linux (8)
Quiero agregar algunos directorios a mi RUTA. Lamentablemente, estos directorios se encuentran en la ruta de Windows que contiene espacio (como los Documentos y la Configuración)
Intenté sin éxito:
Crea una variable:
43598811@E250BZD20015026 ~
$ winhome="/cygdrive/c/Documents/ and/ Settings/43598811/"
43598811@E250BZD20015026 ~
$ cd $winhome
bash: cd: /cygdrive/c/Documents/: No such file or directory
43598811@E250BZD20015026 ~
$ cd "$winhome"
bash: cd: /cygdrive/c/Documents/ and/ Settings/43598811/: No such file or directory
Crea un alias
43598811@E250BZD20015026 ~
$ alias winhome="/cygdrive/c/Documents/ and/ Settings/43598811/"
43598811@E250BZD20015026 ~
$ winhome
bash: /cygdrive/c/Documents and Settings/43598811/: is a directory
43598811@E250BZD20015026 ~
$ cd winhome
bash: cd: winhome: No such file or directory
Use un enlace suave: está funcionando ... pero no quiero usar esto
Cualquier sugerencia ?
Probablemente sea muy tarde ahora, pero utilizo una solución diferente a este problema en los últimos años. En cygwin.bat prefijo algunas declaraciones para crear unidades virtuales usando el comando subst
. Usando este comando, puede sustituir una letra de unidad por rutas realmente largas (y aquellas que contienen espacios o caracteres especiales de Win). Más tarde puede consultarlos desde su shell y scripts directamente como /cygdrive/x/
, /cygdrive/y/
, y así sucesivamente. Esto también ayuda a obtener accesos directos a estos directorios desde Windows shell como explorer, etc.
En una nota relacionada, si lo desea, puede deshacerse del prefijo /cygdrive
usando el comando mount
de Cygwin. ver el mount --help
.
Esto funciona:
$ winhome="/cygdrive/c/Documents and Settings/"
$ cd "$winhome"
$ pwd
/cygdrive/c/Documents and Settings
El enfoque con la variable debería funcionar si lo definió correctamente. La tuya contiene barras invertidas sin una buena razón.
Si coloca la ruta entre comillas, no necesita escaparse de los espacios, pero cuando llama a cd
, necesita poner la variable entre comillas para obtener el comportamiento correcto.
Por lo tanto, su variable simplemente debe declararse así, pero se debe usar el uso de comillas alrededor de la variable:
~> winhome="/cygdrive/c/Documents and Settings/43598811/"
~> cd "$winhome"
Esto se debe a la forma en que las variables se sustituyen en el shell. Si lo haces cd winhome
sin el " "
, termina luciendo así una vez que la variable sea sustituida:
cd /cygdrive/c/Documents and Settings/43598811/
Esto se analiza como cuatro argumentos separados: cd
, /cygdrive/c/Documents
, and
, y Settings/43598811/
, que no tiene sentido para el shell porque el directorio /cygdrive/c/Documents
no existe.
Soy un completo novato de Cwywin, pero seguramente crear un enlace simbólico a su hogar de Windows tiene que ser un primer paso fácil.
es decir:
wh="/cygdrive/c/Documents and Settings/Erich/My Documents"
ln -s "$wh" wh
entonces puedes simplemente:
ls wh
podría hacer lo mismo para su escritorio, etc. ... y no se preocupe más por la conversión de win / cyg.
editar ahora He usado cygpath
, creo que esta es la herramienta para usar, con o sin enlaces simbólicos, es un paquete pequeño y ordenado para tratar la ruta de acceso * nix / wind disjoint
Use cygpath --mydocs
.
Otras carpetas especiales según cygpath --help
:
-A, --allusers use `All Users'' instead of current user for -D, -O, -P
-D, --desktop output `Desktop'' directory and exit
-H, --homeroot output `Profiles'' directory (home root) and exit
-O, --mydocs output `My Documents'' directory and exit
-P, --smprograms output Start Menu `Programs'' directory and exit
-S, --sysdir output system directory and exit
-W, --windir output `Windows'' directory and exit
Para acceder a la ruta / cygdrive / c / Program Files (x86), use el carácter /.
$ cd /cygdrive/c/Program/ Files/ /(x86/)
¡Buen día!
Puede usar cygpath
para convertir la ruta de Windows en rutas POSIX compatibles con Cygwin. También puede mostrar las ubicaciones de algunas carpetas especiales del sistema (como el directorio de inicio de Windows, el escritorio, mis documentos, etc.)
p="C:/Documents and Settings"
cd "$(cygpath -u "${p}")"
Aquí hay algunos enlaces relevantes a la documentación de Cygwin: