繁体   English   中英

如何在 Linux 的两个目录中找到相似的文件

[英]How can I find similar files within two directories in Linux

我有一个任务如下:

循环遍历 ~files 中的每个文件,检查 ~oUser/files 中是否存在相同的文件,如果存在,则将 oUser 中的文件移动到 .bkp。 确保文件不存在后,将文件从主目录复制到 oUser 的主目录。

我很难理解这个问题,但我开始一步一步地分解它,我无法理解如何找到公共文件。

这是我到目前为止所做的:

cd files
touch t1.txt
touch t2.txt
touch t3.txt

cd ~oUser/files
touch t2.txt
touch t4.txt

所以我学会了循环是:

for FILE in ~/files; do echo $FILE; done
for FILE in ~/oUser/files; do echo $FILE; done

我以为我可以将名称输出到特定文件中,然后使用 grep 来表示共性

find ~/files -type f > files.txt

find ~oUser/files -type f > oUserfiles.txt

grep -l files.txt oUserfiles.txt > file.txt

但是当我打开file.txt它是空的。

我不会为你写作业,但这里有一些你可能会觉得有用的信息。

find打印它找到的以您提供的路径开头的文件。 因此,如果您在~/files/有文件example.txt ,这将通过find ~/files -type f作为$HOME/files/example.txt打印。 这意味着如果您在不同的文件夹中运行find ,输出将不匹配,因此即使grep按照您解释的方式工作(即匹配文件中的行),它仍然无法工作,因为路径不同。

格雷普

grep期望输入的形式

grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

如其手册页中所述 -l标志将grep的行为更改为仅打印匹配的文件的名称,因此grep -l files.txt oUserfiles.txt仅检查oUserfiles.txt中的任何行oUserfiles.txt与文字字符串files.txt匹配,如果匹配,则它输出文字字符串oUserfiles.txt 我建议阅读该手册页,但我会注意到-f标志从第一个文件中逐行提取模式,如果您仍然想这样做的话。`

检查文件存在

您可以使用[ -e path/to/file.txt ]检查特定文件是否存在。 那里的空格很重要,所以不要省略它们。 为了检查 ~ 并使用变量,您需要类似于[ -e ~/files/"$FILE" ] ,它允许 bash 将~扩展到$HOME (感谢@Cyrus! )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM