Linux 查找文件夹中的文件以删除

Linux 查找文件夹中的文件以删除

目标是找到具有给定名称的目录并删除其中的所有文件,保留实际目录

find /home/www/sites/ -iname '_cache' -exec du -hs {} \;

这给了我一个文件及其大小的列表

204K    /home/www/sites/test.site.com/html/development/Temporary/_cache
904K    /home/www/sites/test.site2.com/html/development/Temporary/_cache

使用Linux find 命令可以实现吗?

答案1

我尝试了一些方法,似乎有效,这是 Alex 在此处发布的类似解决方案。

find . -iname '_cache' | xargs -I {} find {} -type f -maxdepth 1 -exec rm {} \;

它应该只删除 _cache 目录中的文件,并且只删除此目录中的文件。它不会删除 _cache 目录子目录中的任何文件。

当然,使用前请先尝试一下,不要使用 rm,而是使用 ls 或一些无害的内容。

答案2

我还没有彻底测试过这个逻辑......但是你可以在循环内做一些事情,例如:

for findname in $(find /path/to/search -name '_pattern')
do
  find $findname -type f
done

因此,您将获得符合搜索模式的文件列表,然后使用新搜索循环遍历每个文件以查找要删除的文件。

编写的方式会为您提供一个文件列表,因此您可以将其重定向到一个文件,然后使用 rm 循环遍历该文件。您还可以将 exec 附加到 for 循环中的 find 中。我当然建议先按编写的方式运行,以测试逻辑并确保匹配看起来不错。

答案3

正确的命令来删除它

find . -iname '_cache' | xargs -I {} find {} -type f -maxdepth 1 -delete 

答案4

find 有一个 -delete 选项。这将删除所有匹配项。

来自手册页

-删除

          Delete files; true if removal succeeded.  If the removal failed,
          an  error message is issued.  If -delete fails, find's exit stat-
          us will be nonzero (when it eventually exits).  Use of  -delete
          automatically turns on the -depth option.

          Warnings:  Don't  forget that the find command line is evaluated
          as an expression, so putting -delete first will make find try to
          delete everything below the starting points you specified.  When
          testing a find command line that you later intend  to  use  with
          -delete,  you should explicitly specify -depth in order to avoid
          later surprises.  Because -delete  implies  -depth,  you  cannot
          usefully use -prune and -delete together.

相关内容