如何删除子文件夹内的所有文件,但不删除子文件夹本身?

我知道如何递归删除所有子文件夹和文件。但在这种情况下,我需要保留子文件夹。基本上,我需要将它们全部清空。
所以,我有
rootdir/
        subA/           
        subB/
        subC/
        subN/

我想删除subAsubN中的所有文件,但不删除subA...subN本身。
这个操作需要使用什么控制台命令?我猜应该是rm命令的一个开关。
4个回答

你可以使用find命令递归地仅识别普通文件(类型f)。
find rootdir -type f

如果显示的结果符合您的期望,那么就实际删除它们。
find rootdir -type f -delete

NB这是真正的删除,而不是“移至回收站”,所以在执行命令之前请务必百分之百确认您真正想要进行此操作。

看起来它是有效的,除了当我导航到我当前所在的目录时 find ./ -type f -print。有没有办法不进行永久删除而是发送到回收站? - ubuntico
5如果你使用的是较新版本的普通Ubuntu,你应该可以使用gvfs-trash命令:具体来说,将-delete替换为-execdir gvfs-trash {} + - steeldriver
1我使用的是14.04版本,这个垃圾命令可以正常运行。 - ubuntico

在steeldriver的回答基础上,你可以使用xargs来确保只调用一次gvfs-trash。在他的例子中,find命令会为每个被find命令找到的文件调用一次gvfs-trash。如果文件很多的话,这可能会很慢。
find . -type f -print0 | xargs -0 gvfs-trash

1如果你指的是评论中的例子,那么+表示gvfs-trash将被调用多个文件名,所以它等同于你的xargs命令。 - muru
啊哈!我不知道那个。嗯,我猜这样就没什么用了。 - Unacoder

你也可以用rm命令来做这个,但你得重复操作。

你可以先用cd命令切换到父目录。

cd /rootdir

然后你需要运行以下命令:

rm -rf ./folder/*

将"folder"替换为你想清空的文件夹的名称(例如subA)。

重复此步骤直至所有文件夹都为空。

注意,-rf选项会同时删除要清空的文件夹内的所有子文件夹。


你可以用-exec这样做: find rootdir -type f -exec rm {} \;(注意反斜杠是必需的)