You can nuke whole directory or sub-directory tree by using rm -rf command with -rf flags under UNIX or Linux. But ftp server does not gives rm -rf command. For ftp server you use the rmdir command to remove a directory (and rm for files). Depending on the remote server, you may be able to remove a non-empty directory.(most remote ftp server disables this option)
For example, consider my following ftp directory server structure (I do not have ssh access to this FTP box):
ccbackup/ ora9backup/ usershotdata/ vivek/ |-Junk |-mp3 |-02/09 |-03/09 |.... ... linux-iso/ openbsd-ports/ freebsd-ports/ tosbackup/ cnowbackup/ ...
Now let us say I want remove all files and sub-directories under /vivek/ directory. There are least 100 subdirectories and deleting all files and directory manually will take lots of time.
To nuke a vivek/ directory, you need to use ncftpls command to obtain the list of all subdirectories:
$ ncftpls -u vivek -p mypassword ftp://array05.wan.nixcraft.com/vivek/
Output:
Junk/ mp3/ 02/09/ 03/09/ ...
Where,
- -u vivek : FTP login username
- -p mypassword : Ftp password
- ftp://array05.lan.nixcraft.com/vivek/ : Ftp server name (array05.wan.nixcraft.com) followed by path (/vivek/).
Now you can store a list of all sub-directories in a shell variable called LIST. Type the following command at shell prompt:
$ LIST=$(ncftpls -u vivek -p mypassword ftp://array05.wan.nixcraft.com/vivek/)
$ echo $LIST
Output:
Junk/ mp3/ 02/09/ 03/09/ ….
To remove all sub-directories from /vivek/ dir you can write a shell script as follows:
LIST="$(ncftpls -u vivek -p mypassword ftp://array05.wan.nixcraft.com/vivek/)"
for dir in $LIST
do
rdir="/vivek/${dir}"
ncftp -u"vivek" -p"password" array05.wan.nixcraft.com <<EOF
cd $rdir
rm *
rmdir $rdir
quit
EOF
done
How it works?
- ncftp ftp client login to my ftp server.
- Script will change directory to $rdir
- First, it will remove all files
- Next, it will remove subdirectory
- And ftp connection will terminated
- The entire cycle is repeated using a shell for loop construct.
You can obtain complete working and generic version here. You can use logic presented here to write a shell script for sftp server. You can modify this script rotate ftp backups and much more.
🐧 Get the latest tutorials on Linux, Open Source & DevOps via:
- RSS feed or Weekly email newsletter
- Share on Twitter • Facebook • 2 comments... add one ↓
Category | List of Unix and Linux commands |
---|---|
File Management | cat |
Firewall | Alpine Awall • CentOS 8 • OpenSUSE • RHEL 8 • Ubuntu 16.04 • Ubuntu 18.04 • Ubuntu 20.04 |
Network Utilities | dig • host • ip • nmap |
OpenVPN | CentOS 7 • CentOS 8 • Debian 10 • Debian 8/9 • Ubuntu 18.04 • Ubuntu 20.04 |
Package Manager | apk • apt |
Processes Management | bg • chroot • cron • disown • fg • jobs • killall • kill • pidof • pstree • pwdx • time |
Searching | grep • whereis • which |
User Information | groups • id • lastcomm • last • lid/libuser-lid • logname • members • users • whoami • who • w |
WireGuard VPN | Alpine • CentOS 8 • Debian 10 • Firewall • Ubuntu 20.04 |
I’m not sure if this is unique to my setup… but I was able to use ncftp and do:
rm -fr /unempty-ftp-dir/
from the ftp command line.
What exactly is ncftpls ?
– Shelon Padmore