如果不知道其名字,是否可能找到它?
我使用 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
答案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'