我甚至不确定这是否很容易,但我想列出最近从目录中删除的文件,如果可能的话递归。
我正在寻找一种不需要创建包含原始目录结构快照的临时文件的解决方案,因为写入访问可能并不总是可用。 编辑:如果通过将快照存储在shell变量而不是文件中来实现相同的结果,那将解决我的问题。
类似的东西:
find /some/directory -type f -mmin -10 -deletedFilesOnly
编辑:操作系统:我正在使用Ubuntu 14.04 LTS,但命令很可能在各种Linux机箱或Docker容器中运行,其中大部分或全部应该是使用ext4
,我很可能无法进行修改。
答案 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)
几件事:
如果您的分区为ext2,则成功可能为零;最适合ext4
df /
使用#2的结果填充装载点,在我的情况下:
sudo debugfs / dev / mapper / q4os--desktop--vg-root
lsdel
q(退出debugfs)
sudo debugfs -R'ncheck 528754'/ dev / sda2 2> / dev / null(用步骤4中的一个替换数字)
答案 2 :(得分:0)
感谢您的评论&回答家伙。 debugfs
似乎是初始要求的一个有趣的解决方案,但对于简单和简单而言,它有点过分。我正在寻找的解决方案;如果我理解正确,则必须使用debugfs
支持构建内核,并且目标目录必须位于debugfs
安装中。不幸的是,这对我的用例不起作用;我必须能够为现有的“基本”内核和目录提供解决方案。
由于这似乎几乎无法实现,我已经能够协商并放宽要求,直到列出最近从目录中删除的文件的金额,如果可能的话递归。
这是我最终实施的解决方案:
find
命令通过管道传输到wc
来计算目标目录中的原始文件数(递归)。然后,可以轻松地将结果存储在shell或脚本变量中,而无需对文件系统进行写访问。 DEL_SCAN_ORIG_AMOUNT=$(find /some/directory -type f | wc -l)
DEL_SCAN_NEW_AMOUNT=$(find /some/directory -type f | wc -l)
DEL_SCAN_DEL_AMOUNT=$(($DEL_SCAN_ORIG_AMOUNT - $DEL_SCAN_NEW_AMOUNT));
DEL_SCAN_ORIG_AMOUNT=$DEL_SCAN_NEW_AMOUNT
if [ $DEL_SCAN_DEL_AMOUNT -gt 0 ]; then echo "$DEL_SCAN_DEL_AMOUNT deleted files"; fi;
不幸的是,如果在间隔期间创建和删除了相同数量的文件,此解决方案将不会报告任何内容,但这不是我的用例的巨大问题。
为了避免这种情况,我必须存储实际的文件列表而不是数量,但是我无法使用shell变量来完成这项工作。如果有人能弄明白的话,我会非常帮助我,因为它符合最初的要求!
我也想知道是否有人对这两种方法中的任何一种都有评论。
答案 3 :(得分:-2)
历史 >> 历史.txt
查找所有 rm 语句。