如何列出目录中最近删除的文件?

时间:2015-08-07 17:50:41

标签: linux bash shell command-line

我甚至不确定这是否很容易,但我想列出最近从目录中删除的文件,如果可能的话递归。

我正在寻找一种不需要创建包含原始目录结构快照的临时文件的解决方案,因为写入访问可能并不总是可用。 编辑:如果通过将快照存储在shell变量而不是文件中来实现相同的结果,那将解决我的问题。

类似的东西:

find /some/directory -type f -mmin -10 -deletedFilesOnly

编辑:操作系统:我正在使用Ubuntu 14.04 LTS,但命令很可能在各种Linux机箱或Docker容器中运行,其中大部分或全部应该是使用ext4,我很可能无法进行修改。

4 个答案:

答案 0 :(得分:6)

您可以使用debugfs实用程序

  

debugfs是一个简单易用的基于RAM的文件系统,是专门设计的   用于调试目的

首先,在终端中运行debugfs /dev/hda13(用您自己的磁盘/分区替换/dev/hda13)。

(注意:您可以通过在终端中运行df /来查找磁盘名称。

进入调试模式后,您可以使用命令lsdel列出与已删除文件对应的inode。

  

当在linux中删除文件时,它们只是没有链接但是它们是   inode(文件实际存在的磁盘中的地址)是   没有删除

要获取这些已删除文件的路径,您可以使用debugfs -R "ncheck 320236"将该数字替换为您的特定inode。

Inode   Pathname
320236  /path/to/file

从这里,您还可以使用cat检查已删除文件的内容。 (注意:如有必要,您也可以从这里恢复。)

关于此here的好帖子。

答案 1 :(得分:1)

几件事:

  1. 如果您的分区为ext2,则成功可能为零;最适合ext4

  2. df /

  3. 使用#2的结果填充装载点,在我的情况下:

    sudo debugfs / dev / mapper / q4os--desktop--vg-root

  4. lsdel

  5. q(退出debugfs)

  6. sudo debugfs -R'ncheck 528754'/ dev / sda2 2> / dev / null(用步骤4中的一个替换数字)

答案 2 :(得分:0)

感谢您的评论&回答家伙。 debugfs似乎是初始要求的一个有趣的解决方案,但对于简单和简单而言,它有点过分。我正在寻找的解决方案;如果我理解正确,则必须使用debugfs支持构建内核,并且目标目录必须位于debugfs安装中。不幸的是,这对我的用例不起作用;我必须能够为现有的“基本”内核和目录提供解决方案。

由于这似乎几乎无法实现,我已经能够协商并放宽要求,直到列出最近从目录中删除的文件的金额,如果可能的话递归。

这是我最终实施的解决方案:

  1. 一个简单的find命令通过管道传输到wc来计算目标目录中的原始文件数(递归)。然后,可以轻松地将结果存储在shell或脚本变量中,而无需对文件系统进行写访问。
  2. DEL_SCAN_ORIG_AMOUNT=$(find /some/directory -type f | wc -l)

    1. 我们可以稍后再次运行相同的命令以获取更新的文件数。
    2. DEL_SCAN_NEW_AMOUNT=$(find /some/directory -type f | wc -l)

      1. 然后我们可以将两者之间的差异存储在另一个变量中并更新原始数量。
      2. DEL_SCAN_DEL_AMOUNT=$(($DEL_SCAN_ORIG_AMOUNT - $DEL_SCAN_NEW_AMOUNT)); DEL_SCAN_ORIG_AMOUNT=$DEL_SCAN_NEW_AMOUNT

        1. 如果文件数量下降,我们可以打印一条简单的消息。
        2. if [ $DEL_SCAN_DEL_AMOUNT -gt 0 ]; then echo "$DEL_SCAN_DEL_AMOUNT deleted files"; fi;

          1. 返回第2步。
          2. 不幸的是,如果在间隔期间创建和删除了相同数量的文件,此解决方案将不会报告任何内容,但这不是我的用例的巨大问题。

            为了避免这种情况,我必须存储实际的文件列表而不是数量,但是我无法使用shell变量来完成这项工作。如果有人能弄明白的话,我会非常帮助我,因为它符合最初的要求!

            我也想知道是否有人对这两种方法中的任何一种都有评论。

答案 3 :(得分:-2)

历史 >> 历史.txt

查找所有 rm 语句。