删除目录下的所有文件,但不删除目录

删除目录下的所有文件,但不删除目录

我有一个名为 的目录outer

outer包含一个名为inner(其中包含许多具有相同扩展名的文件)的目录

cdouter。如何删除其中的所有文件inner但保留目录inner(但为空)?

答案1

如果您想删除目录的内容而不是目录本身,您所需要做的就是告诉rm删除内容:

rm inner/*

这将删除其中的所有非隐藏文件./inner并保持目录不变。要同时删除任何子目录,请使用-r

rm -r inner/*

如果你还想删除隐藏文件,你可以这样做(假设你使用的是 bash):

shopt -s dotglob
rm -r inner/*

最后一个命令将删除 中的所有文件和所有目录inner,但保持inner其自身不变。

最后,请注意,您不需要cd运行outer以下任何一个:

$ tree -a outer/
outer/
├── dir
└── inner
    ├── dir
    ├── file
    └── .hidden

3 directories, 2 files

我现在可以rm -r outer/inner/*从当前目录运行,无需cd outer,它将删除除目录本身之外的所有内容:

$ shopt -s dotglob
$ rm -r outer/inner/*
$ tree -a outer/
outer/
├── dir
└── inner

2 directories, 0 files

答案2

find inner -mindepth 1 -delete

答案3

如果你想删除某个目录结构下的所有文件,但保留所有目录,最简单的是使用find's-delete开关:

find /path/to/outer -type f -delete

要首先检查要删除的内容,只需省略-delete末尾的即可。

答案4

我经常使用这个循环,这样你就可以应用到任意数量的文件夹,甚至不需要担心!

for i in `ls`; do rm -f $i/*; done

相关内容