Linux常用rmdir命令代码实现

Linux系统是由文件和目录组成的。在日常开发中,可能有很多不再需要的目录。我们需要定期清理它们。

在 Linux 中,有一个常用命令叫 rmdir,该命令用于从我们的 Linux 文件系统中删除目录。在这边文章终年,我们将讨论如何使用带有各种命令行选项的 rmdir 命令,以及最后代码实现rmdir命令。

rmdir 命令说明

rmdir 命令用于从我们的 Linux 操作系统中删除空目录。每个需要删除的目录都不应包含任何文件或子目录。否则,rmdir 命令无法从我们的文件系统中删除该目录。

如果指定的目录不为空,则 rmdir 命令不会删除该目录,而是会尝试删除命令中的其他指定目录。目录按照它们在命令行中指定的顺序(即从左到右)删除。

如何获取 rmdir 命令的帮助

要获得有关 rmdir 命令的帮助,请使用以下命令。

rmdir --help

在这里插入图片描述

rmdir 和 rm –r 的区别

可以使用 rm 命令通过使用 -r 选项来删除目录。 那么这两个命令之间的基本区别是什么?

rm 命令也可用于删除非空目录,而 rmdir 命令仅用于删除空目录。

rmdir命令简单实现

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <err.h> /*warn*/

static int pflag;
static int vflag;

static void usage(void)
{

	fprintf(stderr, "usage: rmdir [-pv] directory ...\n");
}

static int rm_path(char *path)
{
	char *p;

	p = path + strlen(path);
	while (--p > path && *p == '/')
		;
	*++p = '\0';
	while ((p = strrchr(path, '/')) != NULL) {
		/* 删除尾部斜杠*/
		while (--p >= path && *p == '/')
			;
		*++p = '\0';
		if (p == path)
			break;

		if (rmdir(path) < 0) {
			warn("%s", path);
			return 1;
		}
		if (vflag)
			printf("%s\n", path);
	}

	return 0;
}

int main(int argc, char *argv[])
{
	int ch, errors;

	while ((ch = getopt(argc, argv, "pv")) != -1)
		switch(ch) {
		case 'p':
			pflag = 1;
			break;
		case 'v':
			vflag = 1;
			break;
		case '?':
		default:
			usage();
		}
	argc -= optind;
	argv += optind;

	if (argc == 0)
		usage();

	for (errors = 0; *argv; argv++) {
		if (rmdir(*argv) < 0) {
			warn("%s", *argv);
			errors = 1;
		} else {
			if (vflag)
				printf("%s\n", *argv);
			if (pflag)
				errors |= rm_path(*argv);
		}
	}

	exit(errors);
}

编译运行:

在这里插入图片描述

创建一个空目录,然后用实现的版本删除该空目录。

Linux 中的 rmdir 命令示例

让我们讨论以下例子来更好地理解 rmdir 命令,当我们要删除一个空文件时

在这里插入图片描述
如果名为 test 的目录为空,则上述命令将删除该目录。但是我们想要删除非空目录,则会报错

在这里插入图片描述

如果目录不为空,则会产生错误消息。在这种情况下,您必须先删除目录内容,然后再删除它。

可能有人要问,rmdir能不能忽略掉非空目录?答案是可以的。

如何忽略非空目录

默认情况下,如果您尝试删除非空目录,则 rmdir 命令将产生错误消息。 要忽略删除非空目录时出现的错误消息,请使用 --ignore-fail-on-non-empty 选项。 这里没有对该选项做处理,可以使用Linux的自带rmdir实现.

在这里插入图片描述rmdir 命令仅用于删除空目录。用选项–ignore-fail-on-non-empty只是忽略非空目录时出现的错误消息, 绝对没有办法使用 rmdir 命令删除非空目录。

总结

rmdir 命令仅删除空目录,这有助于我们避免数据意外丢失。 这是一个重要的特性,因为在 Linux 系统中,一旦数据被删除,恢复数据是极其困难的。

欢迎关注微信公众号【程序猿编码】,欢迎添加本人微信号(17865354792)交流学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值