【问题标题】:Linux find and delete files but redirect file names to be deletedLinux查找并删除文件但重定向文件名以删除
【发布时间】:2013-12-22 16:39:32
【问题描述】:

有没有办法在文件被删除之前将文件名写入文件以供日后参考以检查已删除的内容。

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

【问题讨论】:

    标签: linux find command delete-file


    【解决方案1】:

    来自名为 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 - 防止它失控
    • -type - 确保只有文件
    • -name - 确保只有您过滤后的名称
    • -print - 将结果发送到标准输出
    • -delete - 删除上述文件
    • >> - 附加到不覆盖的文件 > 创建新文件

    在 CENTOS7 上为我工作

    【讨论】:

      【解决方案2】:

      就像威廉说的,你可以使用-print。但是,您也可以使用-fprint 标志来代替-print &gt; log

      你想要这样的东西:

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

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

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

      【讨论】:

      • fprint 覆盖文件;追加到文件不是更好吗???我看过手册,但对我来说太复杂了。
      【解决方案3】:

      通过这样的方式,您可以在 exec 语句中执行多个命令,例如日志到文件、rm 文件以及您需要的任何其他命令

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

          您可以使用-execrm -v

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

          rm -v 将报告它正在删除的内容。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-04-10
            • 2010-10-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多