GNU/Linux >> Linux Esercitazione >  >> Linux

Come scoprire se ci sono file in una cartella ed uscire di conseguenza (in KSH)

Per seguire il commento di Stéphane Chazelas alla risposta di Kusalananda:

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

Utilizzare un array per contenere i file. Inizia con un'espressione glob che corrisponda ad alcuni file:

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

Ora un glob "nudo" che non corrisponde per dimostrare che un glob non corrispondente viene sostituito dal modello glob come una stringa:

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

Ora con il prefisso "null glob"

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

Vedi la sezione Generazione del nome del file della tua pagina man di ksh.

Per rispondere specificamente alla tua domanda:

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

Dovresti prendere l'abitudine di usare nomi di variabili TUTTO MAIUSCOLO.

Vedi anche:https://mywiki.wooledge.org/ParsingLs


Puoi far sparire il messaggio di errore con 2>/dev/null all'interno del ls .

Puoi quindi verificare se $CONTENTS è vuoto 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

Per rilevare se un modello di nome file si espande in qualsiasi cosa, puoi usare

set -- "$gp_path"ALLSTUFF*.zip

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

Il set Il comando imposta i parametri posizionali sui nomi file corrispondenti al modello e, se esiste il primo nome file corrispondente, corrisponde a qualcosa. Il pattern rimane non espanso se non corrisponde a nulla.

Questo sarebbe utilizzabile in ksh , bash e qualsiasi altro sh -like shell.


Linux
  1. Come scoprire le directory e i file principali (spazio su disco) in Linux

  2. Come trovare file con autorizzazioni SUID e SGID in Linux

  3. Linux:come scoprire se ci sono file in una cartella ed uscire di conseguenza (in Ksh)?

  4. Come rilevare e scoprire che un programma è in stallo?

  5. Come eseguire il chmod e il chown dei file nascosti in Linux?

Come trovare una stringa o una parola specifica in file e directory

Come utilizzare sed per trovare e sostituire la stringa nei file

Come trovare ed eliminare file duplicati in Linux

Trova ed elimina il file più vecchio se ci sono più di X file in una directory in Linux

Come trovare file duplicati in Linux e rimuoverli

Come faccio a trovare i file e sommare le loro dimensioni?