GNU find 删除目录内的文件但保留目录本身

GNU find 删除目录内的文件但保留目录本身

我用了大半个下午的时间来试图弄清楚这一点。

答案1

删除当前目录下名为 的任何目录下的所有文件,node_modules但保留node_modules

find . -path  '*/node_modules/*' -delete

(这已使用 GNU 进行了测试find,但我预计 BSD/OSX 的find行为也会类似。)

例子

让我们创建一个node_modules包含一些文件的目录:

$ mkdir -p node_modules/dir{1..3}
$ touch node_modules/file{1..3}

现在,让我们看看此find命令返回哪些文件:

$ find . -path  '*/node_modules/*'
./node_modules/dir3
./node_modules/dir1
./node_modules/file3
./node_modules/file2
./node_modules/file1
./node_modules/dir2

这显示文件里面 node_modules不是目录node_modules本身。因此,我们可以用以下命令删除文件:

$ find . -path  '*/node_modules/*' -delete
$ ls
node_modules

相关内容