Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

141
Vistas
Detecta múltiples archivos tgz en un directorio con script de shell

Estoy tratando de usar la siguiente condición para detectar archivos *.tgz en un directorio:

if [ -e ${INPUT_DIRECTORY}*tgz ]

Si bien esta condición funciona muy bien cuando solo hay un archivo, me da un error de expected binary operator en la línea 'si' de mi secuencia de comandos, cuando hay más de un archivo *.tgz en el directorio.

Qué me estoy perdiendo ?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Puede simplemente ls , luego verifique el código de salida de ls. Si es 0 entonces el archivo existe, de lo contrario no existe.

 $ ls wfh.sh wfh.sh $ echo $? 0 $ ls a ls: cannot access 'a': No such file or directory $ echo $? 2

En tu caso, puedes escribir:

 ls ${INPUT_DIRECTORY}*.tgz > /dev/null 2>&1 if [ $? -eq 0 ] ; then echo "exist!" else echo "not!" fi

Además, debe cambiar su globbing a ${INPUT_DIRECTORY}*.tgz en lugar de ${INPUT_DIRECTORY}*tgz ya que puede coincidir involuntariamente con algo como filletgz

Para un script más legible, también puede escribir:

 if ls ${INPUT_DIRECTORY}*.tgz > /dev/null 2>&1 ; then echo "exist!" else echo "not!" fi
over 4 years ago · Santiago Trujillo Denunciar

0

Aquí hay una sugerencia para una prueba, en shell puro:

 for i in "$input_dir"/*.tgz "$input_dir"/.*.tgz; do test -e "$i" && break done

Esto devuelve éxito o fracaso, dependiendo de si existen archivos .tgz . Obviamente, puede eliminar el segundo patrón si desea ignorar los archivos ocultos.

Como función/ejemplo:

 suffix_exists () { for i in "${2:-.}"/*"$1" "${2:-.}"/.*"$1"; do test -e "$i" && return 0 done } if suffix_exists .tgz "$input_dir"; then echo "$input_dir contains .tgz archives" else echo "$input_dir does not contain .tgz archives" fi

Utiliza el directorio actual si no se proporciona ninguno.

Como se mencionó en otra respuesta, es posible que esté abordando su tarea de manera incorrecta (tal vez publique su objetivo). En lugar de detectar archivos .tgz en el directorio, puede ejecutar un comando en cualquier archivo que exista, usando find . Por ejemplo extrayéndolos:

 find "$input_dir" -mindepth 1 -maxdepth 1 \ -type f -name '*.tgz' -exec tar xf {} \;

O moverlos a algún lugar:

 find "$input_dir" -mindepth 1 -maxdepth 1 \ -type f -name '*.tgz' -exec mv -i {} /my/archives \;
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda