3 Stimmen

Befehl zum Löschen aller Dateien und Ordner in einem Ordner mit ncftp

Ich habe einen Ordner auf einem entfernten Server, der gelöscht werden muss. Ich muss alle Dateien und Ordner in diesem Ordner löschen. Ich kann den übergeordneten Ordner nicht löschen und neu erstellen, weil ich die Berechtigungen nicht durcheinanderbringen möchte.

Zum Beispiel: Der entfernte Ordner ist Development/
Dieser Ordner enthält mehrere Dateien und mehrere Ordner.
Ich möchte einen Befehl ausführen, um den Ordner Development/ vollständig zu leeren und eine neue, leere Version zu erstellen.

Außerdem muss das Programm mit einem Windows-FTP-Client kompatibel sein.

4voto

horelvis Punkte 125

Anmeldung am ftp-Server mit ncftp -u [benutzer.ftp] [backup.server]

Befehl ausführen

rmdir -r [Ordner]

1voto

petr Punkte 2524

Um die Frage des Auftraggebers direkt zu beantworten: Der folgende Befehl tut genau das, was verlangt wird:

rm -r *

Stellen Sie sicher, dass Sie zu dem Verzeichnis navigieren, dessen Inhalt Sie löschen möchten, und den Befehl ausführen. Es werden alle Verzeichnisse innerhalb des aktuellen Verzeichnisses gelöscht.

0voto

nycynik Punkte 7038

Hier ist ein Bash-Skript, das den Löschvorgang durchführt.

#!/bin/bash

# Script for retrieving all files on a an ftp server then deleting them.
#
# Requires ncftp and stock ftp client.
#
# We have to do some funkyness since there is no easy way of recursively deleting
#   remote directories.  We use ncftp to download all files and delete them on successfull
#   download. This ,however, leaves empty directories.  So we download the empty directory
#   tree to FSTREEDIR to list all directories to delete(we can't trust the download directory
#   because other directories may exist there). Those directories are then passed to the
#   usual ftp client to delete. 

# @todo - store credentials in a file

FTPSERVER=10.0.1.150
DOWNLOADDIR=/tmp/dl
FSTREEDIR=$DOWNLOADDIR/fstree
USERNAME=bart
PASSWORD=dude
DELETEREMOTEFILES=1

if [ $DELETEREMOTEFILES -eq 1 ]
 then
  DELFILESFLAG="-DD"
 else
  DELFILESFLAG=""
fi

echo "Downloading Reports...
"

cd $DOWNLOADDIR
ncftpget -u $USERNAME -p $PASSWORD -R $DELFILESFLAG ftp://$FTPSERVER

# Delete Files after download
if [ $DELETEREMOTEFILES -eq 1 ]
 then
    echo "Deleting Remote Reports...
    "

    RMSTRING=""

    # if fstree dir exists empty it and recreate it
    if [ ! -d "$FSTREEDIR" ]; then 
      mkdir $FSTREEDIR
    else
      rm -rf $FSTREEDIR/*
    fi

    # Copy remote directory structure to FSTREEDIR
    cd $FSTREEDIR
    ncftpget -u $USERNAME -p $PASSWORD -R $DELFILESFLAG ftp://$FTPSERVER

    # Generate list of directories to delete
    for D in `find $FSTREEDIR -type d| sort -r`
    do
      if [ ! "$D" = "$FSTREEDIR" ]; then
        RMSTRING="$RMSTRING 
        rmdir ${D#$FSTREEDIR/}"
      fi
    done

# Delete remote file structure
ftp -i -n <<EOF
open $FTPSERVER
user $USERNAME $PASSWORD
$RMSTRING
EOF

    # delete old FSTREEDIR
    rm -rf $FSTREEDIR

fi

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X