GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So finden Sie heraus, ob Dateien in einem Ordner vorhanden sind, und beenden ihn entsprechend (in KSH)

Um den Kommentar von Stéphane Chazelas zu Kusalanandas Antwort weiterzuverfolgen:

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

Verwenden Sie ein Array, um die Dateien zu speichern. Beginnen Sie mit einem Glob-Ausdruck, der einigen Dateien entspricht:

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

Jetzt ein "nackter" Glob, der nicht übereinstimmt, um zu demonstrieren, dass ein nicht übereinstimmender Glob durch das Glob-Muster als Zeichenfolge ersetzt wird:

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

Jetzt mit dem Präfix "null glob"

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

Sehen Sie sich den Abschnitt File Name Generation auf Ihrer ksh-Manpage an.

Um speziell auf Ihre Frage zu antworten:

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

Sie sollten es sich abgewöhnen, Variablennamen in GROSSBUCHSTABEN zu verwenden.

Siehe auch:https://mywiki.wooledge.org/ParsingLs


Mit 2>/dev/null können Sie die Fehlermeldung verschwinden lassen innerhalb der ls .

Sie können dann prüfen, ob $CONTENTS ist leer mit -z

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

Um zu erkennen, ob ein Dateinamenmuster zu irgendetwas erweitert wird, können Sie

verwenden
set -- "$gp_path"ALLSTUFF*.zip

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

Die set Der Befehl setzt die Positionsparameter auf die Dateinamen, die mit dem Muster übereinstimmen, und wenn der erste übereinstimmende Dateiname existiert, dann stimmt er mit etwas überein. Das Muster bleibt nicht erweitert, wenn es mit nichts übereinstimmt.

Dies wäre in ksh verwendbar , bash und alle anderen sh -ähnliche Schale.


Linux
  1. So finden Sie MySQL-, PHP- und Apache-Konfigurationsdateien

  2. So finden Sie die Anzahl der Dateien in einem Verzeichnis und Unterverzeichnissen

  3. Wie suche ich nach Dateien nach Größe und Erweiterung?

  4. Linux – Wie kann man herausfinden, ob sich Dateien in einem Ordner befinden und entsprechend beenden (in Ksh)?

  5. Wie finde ich Dateien und summiere ihre Größe?

So finden Sie eine bestimmte Zeichenfolge oder ein bestimmtes Wort in Dateien und Verzeichnissen

So verwenden Sie sed zum Suchen und Ersetzen von Zeichenfolgen in Dateien

So finden und löschen Sie doppelte Dateien in Linux

Älteste Datei finden und löschen, wenn mehr als X Dateien in einem Verzeichnis in Linux vorhanden sind

So finden Sie doppelte Dateien in Linux und entfernen sie

Wie chmod und chown versteckte Dateien in Linux?