Linux查找和删除文件,但重定向要删除的文件名

时间:2013-12-05 16:16:33

标签: linux find command delete-file

是否有办法将文件名写入文件,然后再删除它们以供稍后参考以检查已删除的内容。

find <PATH> -type f -name "<filePattern>" -mtime +1 -delete 

5 个答案:

答案 0 :(得分:21)

只需在-print的调用中添加find表达式:

find <PATH> -type f -name "<filePattern>" -mtime +1 -delete -print > log

我不确定这是否在文件取消关联之前或之后打印了名称,但它无关紧要。我怀疑-delete -print在打印之前取消链接,而-print -delete会在取消链接之前打印。

答案 1 :(得分:8)

就像威廉所说,你可以使用-print。但是,您也可以使用-print > log标记代替-fprint

你想要的东西是:

find <PATH> -type f -name "<filePattern>" -mtime +1 -fprint "<pathToLog>" -delete

例如,我在脚本中使用它:

find . -type d -name .~tmp~ -fprint /var/log/rsync-index-removal.log -delete

答案 2 :(得分:2)

您可以使用-execrm -v

find <PATH> -type f -name "<filePattern>" -mtime +1 -exec rm -v {} \;

rm -v会报告删除的内容。

答案 3 :(得分:0)

使用这样的东西,你可以在exec语句中执行多个命令,比如log to file,rm file,以及你需要的任何其他命令

find <PATH> -type f -name "<filePattern>" -mtime +1 -exec sh -c "echo {} >>mylog; rm -f {}" \;

答案 4 :(得分:0)

从名为removelogs.sh的shell脚本中 在终端中运行命令sh removelogs.sh

这是removelogs.sh文件中的文本。

cd /var/log;
date >> /var/log/removedlogs.txt;
find . -maxdepth 4 -type f -name \*log.old -delete -print >> /var/log/removedlogs.txt
  • 。 -在此位置运行 !!!!因此,请确保不要在根文件夹中运行此命令!
  • -maxdepth-防止其失控
  • 类型-确保仅文件
  • -名称-确保仅过滤您的名称
  • -print-将结果发送到stdout
  • -删除-删除所述文件
  • >>-附加到文件中不会被覆盖>创建新文件

在CENTOS7上为我工作