使用ncftp删除文件夹中所有文件和文件夹的命令

使用ncftp删除文件夹中所有文件和文件夹的命令,ftp,windows-server,Ftp,Windows Server,我在远程服务器上有一个文件夹需要清除。我需要删除此文件夹中的所有文件和文件夹。我无法删除并重新创建父文件夹,因为我不想破坏权限 例如: 远程文件夹正在开发中/ 该文件夹包含多个文件和多个文件夹。 我想运行一个命令来完全清空开发/文件夹,并给我留下一个新的空版本 我还需要它与Windows FTP客户端兼容。这里有一个执行删除的bash脚本 #!/bin/bash # Script for retrieving all files on a an ftp server then deleting

我在远程服务器上有一个文件夹需要清除。我需要删除此文件夹中的所有文件和文件夹。我无法删除并重新创建父文件夹,因为我不想破坏权限

例如: 远程文件夹正在开发中/
该文件夹包含多个文件和多个文件夹。
我想运行一个命令来完全清空开发/文件夹,并给我留下一个新的空版本


我还需要它与Windows FTP客户端兼容。

这里有一个执行删除的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
#/bin/bash
#用于检索ftp服务器上的所有文件并将其删除的脚本。
#
#需要ncftp和股票ftp客户端。
#
#我们必须做一些有趣的事情,因为没有简单的递归删除方法
#远程目录。我们使用ncftp下载所有文件并在成功时删除它们
#下载。但是,这会留下空目录。所以我们下载空目录
#树到FSTREEDIR列出所有要删除的目录(我们不能信任下载目录
#因为可能存在其他目录)。然后将这些目录传递给
#要删除的常见ftp客户端。
#@todo-将凭据存储在文件中
FTPSERVER=10.0.1.150
DOWNLOADDIR=/tmp/dl
FSTREEDIR=$DOWNLOADDIR/fstree
用户名=bart
密码=dude
DELETEREMOTEFILES=1
如果[$DELETEREMOTEFILES-等式1]
然后
DELFILESFLAG=“-DD”
其他的
DELFILESFLAG=“”
fi
echo“下载报告。。。
"
cd$下载目录
ncftpget-u$用户名-p$密码-R$DELFILESFLAG ftp://$FTPSERVER
#下载后删除文件
如果[$DELETEREMOTEFILES-等式1]
然后
echo“正在删除远程报告。。。
"
RMSTRING=“”
#如果存在fstree dir,则清空它并重新创建它
如果[!-d“$FSTREEDIR”];然后
mkdir$FSTREEDIR
其他的
rm-rf$FSTREEDIR/*
fi
#将远程目录结构复制到FSTREEDIR
cd$FSTREEDIR
ncftpget-u$用户名-p$密码-R$DELFILESFLAG ftp://$FTPSERVER
#生成要删除的目录列表
对于'find$FSTREEDIR-类型D | sort-r中的D`
做
如果[!“$D”=“$FSTREEDIR”];然后
RMSTRING=“$RMSTRING
rmdir${D#$FSTREEDIR/}”
fi
完成
#删除远程文件结构

ftp-i-n既然您澄清了您并不局限于ncftp,那么您应该改用它,它内置了对使用
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包含元字符的给定模式,并将结果传递给给定命令。例如
glob-echo*

-f普通文件(默认值)
-d目录
-a所有类型

(请注意,
mrm
在这种情况下不可用,因为它不会扩展
*
以包括目录。)

使用 ncftp-u[user.ftp][backup.server]

运行命令

rmdir-r[文件夹]


为了直接解决OP的问题,以下命令完全按照要求执行:

rm -r *

确保导航到要删除内容的目录,并发出命令。它将删除当前目录中的所有目录。

您是否绝对需要使用ncftp,或者任何ftp程序都可以满足您的需要?我实际上正在使用它进行TeamCity构建,因此,任何兼容的FTP替代方案都很好。我正在运行windows服务器,所以我更喜欢本地版本。看起来lftp与windows服务器不兼容?“这就是我要做的。”米凯克说。随便看看,我看到了一些针对Windows的lftp的构建,以及使用Cygwin构建lftp的说明,所以它仍然应该是您的一个选项,但会有一些额外的工作。好的,我来看看。谢谢