GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo saber si hay archivos en una carpeta y salir en consecuencia (en KSH)

Para dar seguimiento al comentario de Stéphane Chazelas a la respuesta de Kusalananda:

$ ksh
$ echo ${.sh.version}
Version AJM 93u+ 2012-08-01
$ ls
TABLE1.csv  TABLE2.csv

Utilice una matriz para contener los archivos. Comience con una expresión global que coincida con algunos archivos:

$ typeset -a files
$ files=( ~(N)*.csv )
$ echo "${#files[@]}"
2
$ typeset -p files
typeset -a files=(TABLE1.csv TABLE2.csv)

Ahora, un globo "desnudo" que no coincide para demostrar que un globo que no coincide se reemplaza por el patrón de globo como una cadena:

$ files=( *.txt )
$ echo "${#files[@]}"
1
$ typeset -p files
typeset -a files=('*.txt')

Ahora con el prefijo "glob nulo"

$ files=( ~(N)*.txt )
$ echo "${#files[@]}"
0
$ typeset -p files
(empty output)
$

Consulte la sección Generación de nombres de archivo de su página man de ksh.

Para responder específicamente a su pregunta:

typeset -a contents=( ~(N)"$gp_path"/ALLSTUFF*.zip )
if [[ ${#contents[@]} -eq 0 ]]; then
    print 'EMPTY'
    exit 0
else
    print 'NOT EMPTY'
fi

Debe abandonar el hábito de usar nombres de variables en MAYÚSCULAS.

Ver también:https://mywiki.wooledge.org/ParsingLs


Puedes hacer desaparecer el mensaje de error con 2>/dev/null dentro del ls .

A continuación, puede comprobar si $CONTENTS está vacío con -z

CONTENTS=$(ls -d -- "${gp_path}ALLSTUFF"*.zip 2>/dev/null)
if [ -z "$CONTENTS" ]; then
    print 'EMPTY'
    exit 0
else
    print 'NOT EMPTY'
fi

Para detectar si un patrón de nombre de archivo se expande a algo, puede usar

set -- "$gp_path"ALLSTUFF*.zip

if [ -e "$1" ]; then
    echo matched something
else
    echo did not match anything
    exit 1
fi

El set El comando establece los parámetros posicionales en los nombres de archivo que coinciden con el patrón, y si existe el primer nombre de archivo coincidente, entonces coincidió con algo. El patrón permanece sin expandir si no coincide con nada.

Esto sería utilizable en ksh , bash y cualquier otro sh -como concha.


Linux
  1. Linux:¿cómo averiguar si hay archivos en una carpeta y salir en consecuencia (en Ksh)?

  2. Cómo encontrar y eliminar directorios y archivos vacíos en Unix

  3. Cómo encontrar y eliminar directorios y archivos vacíos en Linux

  4. ¿Cómo cambiar los permisos de una carpeta y sus subcarpetas/archivos en un solo paso?

  5. ¿Cómo chmod y chown archivos ocultos en Linux?

Cómo encontrar una cadena o palabra específica en archivos y directorios

Cómo usar sed para buscar y reemplazar cadenas en archivos

Cómo encontrar y eliminar archivos duplicados en Linux

Encuentre y elimine el archivo más antiguo si hay más de X archivos en un directorio en Linux

Cómo encontrar archivos duplicados en Linux y eliminarlos

¿Cómo detectar y descubrir que un programa está en interbloqueo?