varios usan una todos representar que punto por para otro mover los listar letra empiecen ejemplos doble directorio copiar comandos comando caracteres basicos archivos bash loops scripting wildcard

bash - usan - mover todos los archivos de un directorio a otro en linux



Bash for loop con comodines y archivos ocultos (4)

Solo con un simple script de shell y un poco confundido:

Aquí está mi guión:

% for f in $FILES; do echo "Processing $f file.."; done

El comando:

ls -la | grep bash

produce:

% ls -a | grep bash .bash_from_cshrc .bash_history .bash_profile .bashrc

Cuando

FILES=".bash*"

Obtengo los mismos resultados (formato diferente) que ls -a. sin embargo cuando

FILES="*bash*"

Obtengo esta salida:

Processing *bash* file..

Este no es el resultado esperado y no es lo que espero. ¿No se me permite tener un comodín al principio del nombre del archivo? Es el . al principio del nombre de archivo "especial" de alguna manera?

Ajuste

FILES="bash*"

Tampoco funciona.


El globbing predeterminado en bash no incluye los nombres de archivo que comienzan con a. (también conocidos como archivos ocultos).

Puedes cambiar eso con

shopt -s dotglob

$ ls -a . .. .a .b .c d e f $ ls * d e f $ shopt -s dotglob $ ls * .a .b .c d e f $

Para volver a desactivarlo, ejecute shopt -u dotglob .


Si desea ocultos y no ocultos, configure dotglob (bash)

#!/bin/bash shopt -s dotglob for file in * do echo "$file" done


Si el en la parte frontal es especial, y normalmente no se comparará con un comodín * , como se documenta en la página de manual de bash (y es común a la mayoría de los shells de Unix):

Cuando se usa un patrón para la expansión de la ruta de acceso, el carácter “.” Al comienzo de un nombre o inmediatamente después de una barra debe coincidir explícitamente, a menos que se establezca la opción de shell dotglob . Al hacer coincidir un nombre de ruta, el carácter de barra diagonal siempre debe coincidir explícitamente. En otros casos, el carácter "." No se trata especialmente.


FILES=".bash*" funciona porque el nombre de los archivos ocultos comienza con a .

FILES="bash*" no funciona porque el nombre de los archivos ocultos comienza con a . no una b

FILES="*bash*" no funciona porque el comodín * al principio de una cadena omite los archivos ocultos.