ole-objekt
Goto Top

Linux bash script: Datei verschieben nur wenn Zielverzeichnis leer

Hallo!

ich steh gerade total auf dem Schlauch: Ich muss in einem Skript viele Dateien in ein bestimmtes Verzeichnis verschieben, in dem sie von einem anderen Prozess weiter verarbeitet werden. Damit die Bearbeitungsreihenfolge nicht durcheinander gerät, möchte ich vor dem Verschieben prüfen, ob das Zielverzeichnis leer ist. Wenn nicht soll die Prüfung in ein paar Sekunden nochmals erfolgen.

ich habe bisher:

zum Verschieben
#!/bin/bash
for i in /app/blablup/* ; do
   #hier noch einbauen: Zielverzeichnis prüfen ob leer
   mv ${i} /app/palimpalim 
done


Zum Prüfen, ob das Verzeichnis leer ist:

   cd /app/palimpalim
   list=$(echo *) 
   if [ "$list" = "*" ]   
   then 
      #leer
      #hier also Datei verschieben
   else 
      #nichtleer
      sleep 10
      #ja, und jetzt?  wie komme ich zur erneuten Prüfung, ob das Verzeichnis nun endlich leer ist?
   fi

Wahrscheinlich ist die if-Schleife einfach das falsche Konstrukt?

Danke für Eure Hilfe!

Olaf

Content-ID: 278455

Url: https://administrator.de/forum/linux-bash-script-datei-verschieben-nur-wenn-zielverzeichnis-leer-278455.html

Ausgedruckt am: 27.12.2024 um 19:12 Uhr

quin83
Lösung quin83 27.07.2015 aktualisiert um 15:36:45 Uhr
Goto Top
Hi,

ich würde das so lösen (ungetestet):

DIR="/tmp"  

# Check if emtpy
while true; do
  if [ "$(ls -A $DIR)" ]; then  
     sleep 10
  else
    echo OK
    break
  fi
done

# do rest of stuff...
ole-objekt
ole-objekt 27.07.2015 um 15:36:21 Uhr
Goto Top
Danke, das while true ist naheliegend, trotzdem bin ich einfach nicht drauf gekommen...

Meine Lösung sieht nun so aus:

#!/bin/bash
for i in /app/blablup/* ; do
   while true; do 
      IN_EMPTY=(`ls /app/palimpalim | wc -w`)
      if [ ${IN_EMPTY} -eq 0 ]
      then 
         mv ${i} /app/palimpalim 
         break
      else 
         sleep 10
      fi
   done 
done