我有一个名为 的目录outer
。
outer
包含一个名为inner
(其中包含许多具有相同扩展名的文件)的目录
我cd
到outer
。如何删除其中的所有文件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