grep 可以快速找到

grep 可以快速找到

如果不知道其名字,是否可能找到它?

我使用 LaTex 创建了一个文件,然后将其复制到另一个本地目录并重命名了 pdf。我不知道原始文件位于何处,但我手头有重命名的文件。我想对我的 latex 文件进行一些修改并重新创建 pdf。

因为我知道原始文件与重命名后的文件除了名称之外完全相同,有什么方法可以找到我的原始文件?

答案1

当唯一的区别是名称时,booth文件应该具有相同的内容和大小。

1.关于内容。我们可以使用命令来比较两个文件diff file-1 file-2。我们也可以使用此命令进行测试,如下所示:

diff -q file-1 file-2 > /dev/null && echo 'equal' || echo 'different'

2.关于尺寸。我们可以通过以下命令找到具有特定大小的文件(其中 12672 是文件大小,以字节为单位):

find /path/to/search -type f -size 12672c -printf '%p\n'

或者我们可以这样使用范围(其中 12600-12700 是以字节为单位的文件大小范围):

find /path/to/search -type f -size -12700c -size +12600c -printf '%p\n'

请注意,默认情况下该命令find以递归方式工作。

3. 结合两种方法file-1我们的模式文件在哪里):

find /path/to/search -type f -size -12700c -size +12600c -printf '%p\t' -exec sh -c 'diff -q file-1 "$1" > /dev/null && echo "equal" || echo "different"' sh {} \;

4.示例。假设我们有以下目录结构:

$ tree /tmp/test
/tmp/test
├── file-1   # this is the pattern file
├── file-2   # this is almost the same file but wit few additional characters
└── file-3   # this is exact copy of file-1

上述命令的结果是:

$ find /tmp/test -type f -size -12700c -size +12600c -printf '%p\t' -exec sh -c 'diff -q file-1 "$1" > /dev/null && echo "equal" || echo "different"' sh {} \; 
/tmp/test/file-2        different  # OK: here we have added few additional characters
/tmp/test/file-3        equal      # OK: this is exact copy of file-1
/tmp/test/file-1        equal      # OK: this is file-1 compared to its self

或者我们可以通过以下方式更改命令来简化输出:

$ find /tmp/test -type f -not -name "file-1" -size -12700c -size +12600c \
  -exec sh -c 'diff -q file-1 "$1" > /dev/null && printf "%s\tis equal\n" "$1"' sh {} \;
/tmp/test/file-3        is equal

根据评论更新。以下命令查找与 大小相同的文件file-1,并且逗号与和选项diff有关:--brief--report-identical-files

find /path -type f -not -name "file-1" -size $(stat -c%s file-1)c -exec diff -qs file-1 {} \;
Files file-1 and /tmp/test/file-3 are identical

我们可以比较 md5sum以这种方式保存文件:

  • 获取模式文件的 md5sum:

    $ md5sum file-1
    d18b61a77779d69e095be5942f6be7a7  file-1
    
  • 与我们的命令一起使用:

    $ find /path -type f -not -name "file-1" -size $(stat -c%s file-1)c -exec sh -c 'echo "d18b61a77779d69e095be5942f6be7a7 $1" | md5sum -c -' sh {} \;
    /tmp/test/file-3: OK
    

答案2

  • 您可以使用以下选项搜索特定字符串grep -rl "string" (-r 表示递归,在文件中查找字符串,-l 表示显示文件名而不是字符串)

答案3

如果你正在寻找(或者可以接受)GUI 应用程序,你可以尝试“FSlint 看门人“应用程序。您可以通过运行来安装它

sudo apt-get install fslint

如何使用该应用程序:

安装后,请按照以下步骤操作。

  1. 启动应用程序。
  2. 选择“重复项”选项(1)进行搜索内容相同的文件
  3. 单击“+ 添加”按钮(2)并选择要查找文件的目录(确保选中“递归”选项以包含子目录)。
  4. 点击“查找”按钮(3)并等待。

在此处输入图片描述

答案4

grep 可以快速找到

如果使用得当,该grep命令可以快速找到重复项。您必须小心,不要搜索整个文件系统,否则将需要完成。我最近在这里记录了这一点:在所有文件中查找字符串需要很长时间

为了获得最佳速度使用:

grep -rnw --exclude-dir={boot,dev,lib,media,mnt,proc,root,run,sys,/tmp,tmpfs,var} '/' -e 'String in file'

如果您的文件可能位于 Windows 目录中,请删除该mnt目录。

如果您知道该文件位于/home某个目录中,您可以缩短命令:

grep -rnw '/home' -e 'String in file'

相关内容