{"id":350976,"date":"2022-12-15T15:15:02","date_gmt":"2022-12-15T15:15:02","guid":{"rendered":"https:\/\/magazineoffice.com\/como-lidiar-con-los-espacios-en-los-nombres-de-archivo-en-linux\/"},"modified":"2022-12-15T15:15:04","modified_gmt":"2022-12-15T15:15:04","slug":"como-lidiar-con-los-espacios-en-los-nombres-de-archivo-en-linux","status":"publish","type":"post","link":"https:\/\/magazineoffice.com\/como-lidiar-con-los-espacios-en-los-nombres-de-archivo-en-linux\/","title":{"rendered":"C\u00f3mo lidiar con los espacios en los nombres de archivo en Linux"},"content":{"rendered":"


\n<\/p>\n

\n
fatmawati achmad zaenuri\/Shutterstock.com<\/span><\/figcaption><\/figure>\n

Si tiene un nombre de archivo con espacios en un sistema Linux, poner su nombre de archivo entre comillas le permite a Bash tratarlo correctamente. La finalizaci\u00f3n con tabulaci\u00f3n facilita la introducci\u00f3n de nombres de archivo en la l\u00ednea de comandos, incluso si contienen espacios.<\/p>\n

Como la mayor\u00eda de los sistemas operativos, Linux admite nombres de archivo con espacios en ellos. Pero usar estos nombres de archivo en la l\u00ednea de comandos no siempre es sencillo. Aqu\u00ed hay varias formas en que puede manejar los nombres de archivo que contienen espacios.<\/p>\n

El nombre de archivo humilde<\/h2>\n

Todo lo que se almacena en el disco duro de su computadora debe tener un nombre. Sin un nombre, no existir\u00eda ning\u00fan archivo. Todas las aplicaciones y demonios que se inician cuando se inicia su computadora, y todo el software que usa, debe identificarse y almacenarse en un sistema de archivos. Esa identificaci\u00f3n es el nombre del archivo.<\/p>\n

Lo mismo se aplica a los archivos que crea o instala. Todos sus documentos, im\u00e1genes y m\u00fasica necesitan nombres de archivo. Sin nombres de archivo, ninguno de sus activos digitales podr\u00eda existir. Debido a que los nombres de archivo son tan importantes, Linux se esfuerza por imponer la menor cantidad posible de reglas sobre su composici\u00f3n.<\/p>\n

En Linux, un nombre de archivo puede contener cualquier car\u00e1cter adem\u00e1s de la barra inclinada \u00ab\/<\/code>\u201d y el car\u00e1cter nulo, 0x00<\/code>. El car\u00e1cter nulo se usa para marcar el final de una cadena, por lo que no puede estar presente en la cadena en s\u00ed, o Linux truncar\u00eda el nombre del archivo en la posici\u00f3n del car\u00e1cter nulo. Los \u00ab\/<\/code>La barra inclinada se utiliza como separador en las rutas de directorio.<\/p>\n

Los nombres de archivo distinguen entre may\u00fasculas y min\u00fasculas y pueden tener una longitud de hasta 255 bytes, incluido el car\u00e1cter nulo. Las rutas de directorio pueden tener una longitud m\u00e1xima de 4096 bytes, incluido el car\u00e1cter nulo. Tenga en cuenta que esta es su longitud en bytes<\/em>que podr\u00eda no equivaler directamente a caracteres<\/em>. Los caracteres Unicode de 16 bits, por ejemplo, ocupan dos bytes cada uno.<\/p>\n

Los entusiastas de la retrocomputaci\u00f3n y aquellos con mucha memoria sabr\u00e1n que en los primeros d\u00edas de las computadoras personales, el sistema operativo de disco de Microsoft, DOS, no distingu\u00eda entre may\u00fasculas y min\u00fasculas y ten\u00eda un l\u00edmite de nombre de archivo de ocho caracteres, m\u00e1s una extensi\u00f3n de tres caracteres.<\/p>\n

Ten\u00edas que ser muy cuidadoso y, a veces, creativo cuando nombrabas los archivos. En comparaci\u00f3n, la libertad que tenemos hoy significa que podemos nombrar los archivos como queramos, sin pensar en nada m\u00e1s que en la descripci\u00f3n que estamos creando para ese archivo.<\/p>\n

Pero con los nombres de archivo, lo que nos hace tropezar con m\u00e1s frecuencia no son los caracteres que escribimos, sino los espacios entre ellos.<\/p>\n

Por qu\u00e9 los espacios en los nombres de archivo de Linux son un dolor<\/h2>\n

Shells como Bash interpretar\u00e1n una cadena de palabras separadas por espacios como argumentos de comando individuales, no como un \u00fanico argumento. He aqu\u00ed un ejemplo, usando touch<\/code> para crear un nuevo archivo llamado \u00abmi nuevo archivo.txt\u00bb.<\/p>\n

touch my new file.txt<\/pre>\n
ls<\/pre>\n

\"Intentando<\/p>\n

Como podemos ver, ls<\/code> nos muestra que hay tres archivos creados, uno llamado \u201cmi\u201d, otro llamado \u201cnuevo\u201d, y uno m\u00e1s llamado \u201carchivo.txt\u201d.<\/p>\n

Tenga en cuenta que touch<\/code> no se quej\u00f3 ni arroj\u00f3 un error. Lleva a cabo lo que cree que le estamos pidiendo que haga. As\u00ed que silenciosamente nos devuelve a la l\u00ednea de comandos. Si no estamos motivados para verificar, no sabremos que las cosas no han ido seg\u00fan lo planeado.<\/p>\n

Para crear el archivo que quer\u00edamos, tenemos que citar o escapar.<\/p>\n

C\u00f3mo cotizar y escapar espacios<\/h2>\n

Si citamos el nombre completo del archivo, touch<\/code> sabe que necesita tratar el texto citado como un solo argumento.<\/p>\n

touch 'my new file.txt'<\/pre>\n
ls<\/pre>\n

\"Usar<\/p>\n

Esta vez obtenemos el \u00fanico archivo que esper\u00e1bamos.<\/p>\n

Podemos obtener el mismo resultado si usamos el car\u00e1cter de barra invertida \u201c<\/code>\u201d para escapar de los espacios. Al \u00abescapar\u00bb los espacios, no se tratan como caracteres especiales, es decir, separadores de argumentos, sino que se consideran espacios sencillos.<\/p>\n

touch my second new file.txt<\/pre>\n
ls<\/pre>\n

\"Usando<\/p>\n

Eso funciona, pero los espacios de escape hacen que escribir nombres de archivo sea m\u00e1s lento y propenso a errores. Las cosas pueden ponerse realmente feas si tambi\u00e9n tiene nombres de directorio con espacios en ellos.<\/p>\n

cp dir\u00a0one\/my text file.txt dir two\/my text\u00a0file.bak<\/pre>\n
ls<\/pre>\n

\"Uso<\/p>\n

Ese comando copia un solo archivo de texto de un directorio llamado \u00abdir one\u00bb a un directorio llamado \u00abdir two\u00bb y guarda la copia como un archivo BAK. Y es un ejemplo bastante simple.<\/p>\n

C\u00f3mo solucionar el problema del espacio en su origen<\/h2>\n

Si son sus propios archivos, podr\u00eda tomar la decisi\u00f3n pol\u00edtica de nunca usar espacios y crear (o renombrar de forma masiva) nombres de archivo como este.<\/p>\n

mynewtextfile.txt<\/pre>\n

Es cierto que es una soluci\u00f3n robusta, pero sigue siendo fea. Hay mejores opciones, como usar guiones \u201c-<\/code>\u201d o guiones bajos \u201c_<\/code>\u201d para separar sus palabras.<\/p>\n

my-new-text-file.txt<\/pre>\n
my_new_text_file.txt<\/pre>\n

Ambos evitar\u00e1n el problema y son legibles. Si no desea agregar caracteres adicionales a sus nombres de archivo, puede usar CamelCase para que sus nombres de archivo sean legibles, as\u00ed:<\/p>\n

MyNewTextFile.txt<\/pre>\n

La expansi\u00f3n de pesta\u00f1as facilita el manejo de espacios<\/h2>\n

Por supuesto, adoptar una convenci\u00f3n de nomenclatura y apegarse a ella solo ayudar\u00e1 cuando est\u00e9 tratando con sus propios archivos. Es poco probable que los archivos que provienen de cualquier otro lugar sigan la convenci\u00f3n de nomenclatura adoptada.<\/p>\n

Puede usar la expansi\u00f3n de pesta\u00f1as para ayudarlo a \u00abcompletar\u00bb con precisi\u00f3n los nombres de archivo para nosotros. Digamos que queremos eliminar el archivo BAK que creamos en \u00abdir dos\u00bb, usando rm<\/code>.<\/p>\n

Empezamos escribiendo \u00abrm dir\u00bb porque estamos usando el rm<\/code> comando y sabemos que el nombre del directorio comienza con \u00abdir\u00bb.<\/p>\n

rm dir<\/pre>\n

\"Escribir<\/p>\n

Presionar la tecla \u00abTab\u00bb hace que Bash busque coincidencias en el directorio actual.<\/p>\n

\"Al<\/p>\n

Hay dos directorios que comienzan con \u00abdir\u00bb, y en ambos casos el siguiente car\u00e1cter es un espacio. Entonces Bash agrega el car\u00e1cter de barra invertida \u201c<\/code>\u201d y un espacio. Bash luego espera a que proporcionemos el siguiente car\u00e1cter. Necesita el siguiente car\u00e1cter para diferenciar entre las dos posibles coincidencias en este directorio.<\/p>\n

Escribiremos una \u201ct\u201d, por \u201cdos\u201d, y luego presionaremos \u201cTab\u201d una vez m\u00e1s.<\/p>\n

\"La<\/p>\n

Bash completa el nombre del directorio por nosotros y espera a que escribamos el inicio del nombre del archivo.<\/p>\n

Solo tenemos un archivo en este directorio, por lo que escribir la primera letra del nombre del archivo, \u00abm\u00bb, es suficiente para que Bash sepa qu\u00e9 archivo queremos usar. Escribir \u00abm\u00bb y presionar \u00abTab\u00bb completa el nombre del archivo para nosotros, y \u00abEnter\u00bb ejecuta todo el comando.<\/p>\n

\"El<\/p>\n

La expansi\u00f3n de pesta\u00f1as hace que sea m\u00e1s f\u00e1cil asegurarse de obtener los nombres de archivo correctos, y tambi\u00e9n acelera la navegaci\u00f3n y la escritura en la l\u00ednea de comandos en general.<\/p>\n

RELACIONADO:<\/strong> Use la opci\u00f3n de completar con tabulaci\u00f3n para escribir comandos m\u00e1s r\u00e1pido en cualquier sistema operativo<\/em><\/strong><\/p>\n

C\u00f3mo usar nombres de archivo con espacios en Bash Scripts<\/h2>\n

No sorprende que los scripts tengan exactamente los mismos problemas con los espacios en los nombres de archivo que la l\u00ednea de comandos. Si est\u00e1 pasando un nombre de archivo como variable, aseg\u00farese de citar el nombre de la variable.<\/p>\n

Este peque\u00f1o script comprueba el directorio actual en busca de archivos que coincidan con el patr\u00f3n de archivo \u00ab*.txt\u00bb, y los almacena en una variable llamada file_list<\/code>. A for<\/code> loop se utiliza para realizar una acci\u00f3n simple en cada uno.<\/p>\n

#!\/bin\/bash
\n
\nfile_list=*.txt
\n
\nfor file in $file_list
\ndo
\n\u00a0 ls -hl $file
\ndone<\/pre>\n

Copie este texto en un editor y gu\u00e1rdelo en un archivo llamado \u00abfiles.sh\u00bb. Luego usa el chmod<\/code> comando para hacerlo ejecutable.<\/p>\n

chmod +x files.sh<\/pre>\n

\"Usando<\/p>\n

Tenemos algunos archivos en este directorio. Uno tiene un nombre de archivo simple y los otros dos usan guiones bajos \u00ab_<\/code>\u201d o guiones \u201c-<\/code>\u201d en lugar de espacios. Esto es lo que vemos cuando ejecutamos el script.<\/p>\n

.\/files.sh<\/pre>\n

\"Ejecutar<\/p>\n

Eso parece funcionar bien. Pero cambiemos los archivos del directorio por archivos que contengan espacios en sus nombres.<\/p>\n

.\/files.sh<\/pre>\n

\"Ejecutar<\/p>\n

Cada palabra en cada nombre de archivo se maneja como si fuera un nombre de archivo por s\u00ed mismo, por lo que la secuencia de comandos falla. Pero todo lo que tenemos que hacer para que la secuencia de comandos maneje espacios en los nombres de archivo es citar el $file<\/code> variable dentro de la for<\/code> c\u00edrculo.<\/p>\n

#!\/bin\/bash
\n
\nfile_list=*.txt
\n
\nfor file in $file_list
\ndo
\nls -hl \"$file\"
\ndone<\/pre>\n

Tenga en cuenta que el signo de d\u00f3lar \u201c$<\/code>\u201d est\u00e1 dentro de las comillas. Hicimos ese cambio y lo guardamos en el archivo de script \u00abfiles.sh\u00bb. Esta vez, los nombres de archivo se manejan correctamente.<\/p>\n

.\/files.sh<\/pre>\n

\"La<\/p>\n

RELACIONADO:<\/strong> C\u00f3mo procesar un archivo l\u00ednea por l\u00ednea en un script Bash de Linux<\/em><\/strong><\/p>\n

Espaciados, pero no escamosos<\/h2>\n

Evitar espacios en sus propios nombres de archivo solo lo llevar\u00e1 hasta cierto punto. Es inevitable que encuentre archivos de otras fuentes con nombres que contengan espacios. Afortunadamente, si necesita manejar esos archivos en la l\u00ednea de comandos o en secuencias de comandos, existen formas sencillas de hacerlo.<\/p>\n<\/div>\n