Команда для удаления всех файлов и папок в папке с помощью ncftp

У меня есть папка на удаленном сервере, которую мне нужно очистить. Мне нужно удалить все файлы и папки в этой папке. Я не могу удалить и воссоздать родительскую папку, потому что не хочу испортить разрешения.

Например: удаленная папка Development/
Эта папка содержит несколько файлов и несколько папок.
Я хочу запустить команду, чтобы полностью очистить папку Development/ и оставить мне новую пустую версию.

Мне также нужно, чтобы это было совместимо с FTP-клиентом Windows.


person Mike Cole    schedule 27.07.2012    source источник
comment
Вам обязательно нужно использовать ncftp или подойдет любая программа ftp?   -  person blahdiblah    schedule 30.07.2012
comment
На самом деле я использую его для сборки TeamCity, поэтому любая совместимая альтернатива FTP была бы отличной.   -  person Mike Cole    schedule 31.07.2012


Ответы (4)


Поскольку вы пояснили, что не ограничены ncftp, вам следует использовать lftp, который имеет встроенную поддержку для подобные операции с использованием glob и rm -r. Вот полная демонстрация:

~/ftptest$ find .    # Test folder with a number of files and directories in it.
.
./dir1
./dir1/subdir1
./dir1/subdir1/subsubfile1
./dir1/subfile1
./dir2
./file1
./file2

~/ftptest$ lftp localhost    # Connect
Password:
lftp blahdiblah@localhost:~> cd ~/ftptest/    # cd to test folder
cd ok, cwd=/Users/blahdiblah/ftptest

lftp blahdiblah@localhost:~ftptest> ls    # The files are there...
total 0
drwxr-xr-x  4 blahdiblah  staff  136 Jul 30 15:40 dir1
drwxr-xr-x  2 blahdiblah  staff   68 Jul 30 15:40 dir2
-rw-r--r--  1 blahdiblah  staff    0 Jul 30 15:40 file1
-rw-r--r--  1 blahdiblah  staff    0 Jul 30 15:40 file2

lftp blahdiblah@localhost:~/ftptest> glob -a rm -r *    # the magic happens...
rm ok, 7 files removed

lftp blahdiblah@localhost:~/ftptest> bye
~/ftptest$ find .    # ...and then they're gone!
.
~/ftptest$

Документация дает полное объяснение:

rm [-r] [-f] файлы

Удалить удаленные файлы. Не раскрывает подстановочные знаки, используйте для этого mrm. -r для рекурсивного удаления каталога. Будьте осторожны, если что-то пойдет не так, вы можете потерять файлы. -f подавлять сообщения об ошибках.

glob [-d] [-a] [-f] шаблоны команд

Скопируйте заданные шаблоны, содержащие метасимволы, и передайте результат данной команде. Например,
glob echo *

-f простые файлы (по умолчанию)
-d каталоги
-a все типы

(Обратите внимание, что mrm в данном случае неприменим, потому что он не расширяет * для включения каталогов.)

person blahdiblah    schedule 30.07.2012
comment
Похоже, lftp несовместим с сервером Windows? Это то, что я бегу. - person Mike Cole; 31.07.2012
comment
@МайкС. Ковыряясь, я вижу несколько сборок lftp для Windows, а также инструкции по сборке с помощью Cygwin, так что это все еще должно быть для вас вариантом, но это потребует дополнительной работы. - person blahdiblah; 01.08.2012
comment
Хорошо, я проверю. Спасибо! - person Mike Cole; 01.08.2012

Войдите на ftp-сервер с помощью ncftp -u [user.ftp] [backup.server]

Команда Run

rmdir -r [папка]

person horelvis    schedule 16.12.2015

Чтобы напрямую ответить на вопрос OP, следующая команда делает именно то, что требуется:

rm -r *

Убедитесь, что вы перешли в каталог, содержимое которого вы хотите удалить, и введите команду. Он удаляет все каталоги внутри текущего каталога.

person petr    schedule 26.04.2016

Вот скрипт bash, который выполняет удаление.

#!/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
person nycynik    schedule 30.07.2012
comment
Я использую сервер Windows, поэтому я бы предпочел что-то более родное. - person Mike Cole; 31.07.2012