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



我有一个作业如下:

遍历 ~files 中的每个文件,检查 ~oUser/files,如果有,则将 oUser 中的文件移动到 .bkp。 一旦你确保文件不存在,从你的 主目录到 o用户的主目录。

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

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

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打印它找到的文件,这些文件以您为其提供的路径开头。因此,如果您将文件example.txt~/files/中,这将由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中的任何行是否与文字字符串files.txt匹配,如果是,则输出文字字符串oUserfiles.txt。我建议阅读该手册页,但我会注意到,如果您仍然想这样做,-f标志会从第一个文件中逐行拉取模式。

检查文件是否存在

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

相关内容

  • 没有找到相关文章

最新更新