Tengo un script y quiero mostrar diferentes mensajes si existe un archivo o no. Tengo un script como:
count=ls /import/*.zip | wc -l
echo "Number of files: " $count
if [ "$count" > "0" ]; then
echo "Import $count files"
else
echo "**** No files found ****"
fi
Sin embargo, si no existen archivos, esto se muestra en No such file or directory
lugar de 0 archivos. Hay un directorio en el /import/
directorio, por lo que no puedo simplemente hacer un ls
comando, ya que siempre devolverá un valor mayor que 0.
¿Cómo puedo contar el número de archivos de una extensión específica (.zip, .gz, etc.) y usar ese valor en un script bash para mostrar el número de archivos y luego usarlo en una declaración if para mostrar diferentes mensajes?
Prueba con esto:
La idea es ocultar el error "no existe tal archivo" que se imprime en STDERR enviándolo al bitbucket, y utilizar la función de prueba adecuada para comparar números. (
-gt
Significa "mayor que". También hay-eq
,-lt
,-ge
, etc.)fuente
count=$(find /import -type f -name "*.zip" | wc -l)
ls /import/*.zip
si hay subdirectoriosfind
variante.Probé su script y, como era de esperar, cuando no coinciden los archivos , muestra 0 archivos en la salida, pero también muestra el
ls
error justo antes. Resolver esto es bastante fácil, no hay necesidad de deshacerse de élls
. Simplemente reemplace la primera línea con esto:2>/dev/null
redirige stderr a/dev/null
, suprimiendo el mensaje de error.fuente