linux 删除指定文件夹外的其他所有(文件)文件夹

文章介绍了多种在Linux环境下删除指定文件夹之外的所有文件夹和文件的方法,包括使用ls、grep、awk、xargs和find命令的组合,强调了如何通过正则表达式精确选择要保留的文件夹并删除其余内容。这些方法提供了灵活的选项,适用于不同情况下的清理需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一. 删除指定文件夹外的其他所有文件夹命令:

ls |grep -v dir | xargs rm -rf 

方法二. 删除指定文件夹外的其他所有文件夹命令:

查看当前文件夹下有哪些文件和子文件夹,当看到俩个文件夹和多个文件,需求是只保留 public 这个文件夹 其他的文件夹和文件 统统都删除,如下图所示,只要一个命令:

ls | grep -v  public | awk  '{system("rm -rf "$1)}' 

如果只保留common 这个文件夹 需要命令 改为:

ls | grep -v  common  | awk  '{system("rm -rf "$1)}' 

图片

三. 其他方法(没有验证)

1、方法1,比较麻烦的做法是:

复制需要保留的文件到其他文件夹,然后将该目录删除, 然后将需要保留的移动 回来。

mv keep ../ #保留文件(夹) keep
rm -rf * #删除当前文件夹里的所有文件
mv ../keep ./ #将原来的东西移动回来
2、方法2,需要在当前文件夹中进行:
rm -rf !(keep) #删除keep文件之外的所有文件
rm -rf !(keep1 | keep2) #删除keep1和keep2文件之外的所有文件
3、方法3,当前文件夹中结合使用grep和xargs来处理文件名:
ls | grep -v keep | xargs rm #删除keep文件之外的所有文件

说明: ls先得到当前的所有文件和文件夹的名字, grep -v keep,进行grep正则匹配查找keep,-v参数决定了结果为匹配之外的结果,也就是的到了keep之外的所有文件名,然后 xargs用于从 标准输入获得参数 并且传递给后面的命令,这里使用的命令是 rm,然后由rm删除前面选择的文件。
好处:使用了grep来正则表达式来匹配文件名字,可以一次保留多个文件,从而进行更加准确的处理。

4、方法4,使用find命令代替ls,改进方法3从而能够处理制定文件夹的文件:
find ./test/ | grep -v keep | xargs rm #删除当前test文件夹中keep文件之外的所有文件

说明,用grep而不用find -name选取名字,因为find选取名字时比较麻烦,对正则表达式支持不够,无法排除指定文件名。

5、方法5,直接使用find命令删除其他文件:
find ./ -name '[^k][^e][^e][^p]*'  -exec rm -rf {} \; #删除keep以外的其他文件。
find ./ -name '[^k][^e][^e][^p]*'  | xargs rm -rf  #删除keep以外的其他文件。推荐!

说明:上面第二行的代码效率高些,原因在于删除多个文件时 -exec会启动多个进程来处理,而xargs会启动一个rm进程来处理。

四. 参考链接:

  1. linux 删除指定文件夹外的其他所有文件夹
  2. Linux之不删除指定文件夹,其他都删(文件和文件夹)
<think>好的,我现在需要帮用户找到在Linux系统中删除指定文件夹下所有文件的命令。用户可能不太熟悉命令行,所以得解释清楚每个步骤和选项的作用。首先,我记得`rm`命令是用来删除文件和目录的,但需要参数来处理目录和递归删除。 用户提到的是删除指定文件夹下的所有文件”,也就是不需要删除文件夹本身,只清空里面的内容。这时候应该用`rm`命令加上递归选项,但要注意别误删目录。常见的命令可能是`rm -r`,但可能需要确认路径是否正确。 查了下引用资料,引用[1]和[2]都提到了`rm -rf`命令,用于递归强制删除目录及其内容。但用户的需求是删除文件夹内的所有文件,而保留文件夹本身。所以正确的做法应该是定位到该目录下的所有文件,使用通配符`*`来匹配所有文件和子目录。 可能的安全做法是先进入目标目录,然后执行`rm -rf *`,但这样可能会误删隐藏文件(以.开头的文件)。更全面的命令应该包括删除隐藏文件,可以使用`rm -rf ./*`和`rm -rf ./.*`的组合,不过要小心后者可能会删除当前目录(.)和上级目录(..),所以需要排除这些情况。不过这样比较复杂,可能容易出错。 另一种方法是使用`find`命令,如引用[3]提到的,结合`-exec`选项。例如,`find /path/to/directory -mindepth 1 -delete`,这会删除目录下的所有内容,但保留目录本身。`-mindepth 1`确保不删除目录,只处理其下的文件和子目录。`-delete`选项直接删除找到的项目,这样更安全可靠。 需要提醒用户谨慎使用`rm -rf`,因为一旦误操作可能导致数据丢失。尤其是如果路径写错了,比如多打了个空格,可能会删除其他重要文件。所以建议先确认路径,或者使用`ls`命令预览将要删除文件,如引用[3]提到的用`ls`验证。 总结下来,推荐两种方法:一种是使用`rm -rf`加通配符,另一种是使用`find`命令。要详细说明每个参数的作用,并强调注意事项,比如备份数据、确认路径等。用户可能需要具体的示例,所以给出具体的命令格式,替换路径的部分用占位符表示,比如`/path/to/directory`。 另,用户可能还关心如何删除隐藏文件,或者如何处理权限问题。如果目录中有只读文件,可能需要`-f`选项来强制删除。同时,要提到权限要求,用户需要有对目标目录的写权限才能执行删除操作。 最后,确保回答结构清晰,分步骤说明,并附上相关问题,帮助用户扩展了解相关命令的使用,比如如何删除空目录,如何查找并删除特定类型的文件等。</think>在Linux系统中删除指定目录下的所有文件(包括子目录和隐藏文件),可以使用以下命令: ### 方法1:使用`rm`命令 ```bash rm -rf /path/to/directory/{*,.*} 2>/dev/null ``` - `-r`:递归删除子目录和文件[^2] - `-f`:强制删除不提示[^1] - `{*,.*}`:匹配所有可见文件和隐藏文件 - `2>/dev/null`:隐藏错误提示(如目录不存在时的警告) ### 方法2:使用`find`命令 ```bash find /path/to/directory -mindepth 1 -delete ``` - `-mindepth 1`:排除目录本身 - `-delete`:直接删除匹配项[^3] ### 验证删除结果 ```bash ls -la /path/to/directory ``` ### 注意事项 1. 路径中的空格需转义:`/path/with\ space` 2. 删除前建议先测试文件列表:`ls /path/to/directory/{*,.*}` 3. 根目录`/`和家目录`~`的删除操作极其危险 4. 推荐先备份数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值