it-swarm.cn

如何删除目录中的所有文件?

我正在尝试删除目录中的所有文件和子目录。我用了 rm -r删除所有文件,但我想删除所有文件and子目录,不包括顶层目录本身。

例如,我有一个顶级目录,例如images。它包含文件header.pngfooter.png和一个子目录。

现在我要删除header.pngfooter.png和子目录,但不是images

我如何在Linux中做到这一点?

78
poorani

如果您的顶级目录名为images,请运行rm -r images/*。这使用Shell glob运算符* 跑步 rm -rimages内的每个文件或目录上。

63
Jordan Lewis

要删除隐藏文件,您必须指定:

rm -r images/* images/.*

对于其球形包含...,这会导致类似

rm: cannot remove `.' directory `images/.'
rm: cannot remove `..' directory `images/..'

但是它将删除隐藏文件。

一种没有错误消息的方法是使用具有最小深度的查找/删除。这是非常恰当的。

find images -mindepth 1 -delete

您的搜索结果可能缺少-mindepth 要么 -delete谓词,在这种情况下,您可以执行以下操作:

find images/. ! -name . -Prune -exec rm -rf {} +
54
user unknown

要删除目录中的所有文件和目录(包括隐藏的文件和目录),可以尝试以下操作:

  • 采用 ls -Ab以匹配所有文件/目录

    cd dir_name && rm -rf `ls -Ab`
    
  • 使用find匹配所有文件/目录

    find dir_name -mindepth 1 -delete
    

    或者,如果您的find不支持-delete

    find dir_name -mindepth 1 -exec rm -rf {}
    
  • 删除文件夹,然后重新创建

    rm -rf dir_name && mkdir dir_name
    
  • 猛烈地

    shopt -s dotglob  
    rm -rf dir_name/*
    
21
zeekvfu

要递归删除目录中的所有常规文件,此命令(假设GNU或FreeBSD find))就足够了:

find . -type f -delete

这样就留下了所有非常规文件,例如符号链接(无论它们是否指向常规文件),目录,fifos,套接字,设备...

也可以看看:

find . ! -type d -delete

删除目录以外的任何类型的文件。

11
amit singh

试试这个版本:

 rm -r test/*
6
demas

我在这里使用find命令:

步骤1:查找所有文件并删除它们:

find /path/to/directory/ -type f -exec rm {} \;

例:

find /home/user/Desktop/images/ -type f -exec rm {} \;

步骤2:查找所有子目录并删除它们:

find /path/to/directory/ -type d -exec rm -R {} \;
3
Mandar Shinde

问题是清空目录=删除目录的内容,包括隐藏文件,但不删除目录本身。使用-mindepth 1的find命令实际上是正确的方法,但是为了避免错误消息,它必须与-maxdepth 1结合使用:

find /path/to/dir -mindepth 1 -maxdepth 1 -exec rm -rf '{}' \;
3
Maddes

rm的语法是:

rm [OPTION]... FILE...

因此,您必须明确指出相应的路径,例如.

rm -r sub_dir/
0
Zaur Nasibov

您可以使用以下命令删除目录:

Sudo rm -r directoryname1/2/3/*

3/*之后将删除整个目录。

示例Sudo rm -r下载/歌曲/ *

它将删除Downloads/song内的所有文件。

0
Dharmendra Rajput

这对我来说非常有效,每次都测试了几种变体。

从包含图像目录的目录。

rm -frd ./images/*

之前:

images/
    |_ header.png
    |_ footer.png
    |_ subdir/

后:

images/
0
deb-linux-user

要删除当前目录中的所有文件和子目录,包括隐藏的文件和子目录,而不会出现错误消息

rm -rf .[^.] .??* *

或者,从父目录:

rm -rf images/.[^.] images/.??* images/*

来自 https://serverfault.com/a/47940/269538

0
this

另外一个选项:

$ rm -rf /path/to/directory/{*,.*}

来源: https://askubuntu.com/a/552834/56648

0
Eyal Levin