Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

148
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda