bash - 如何使用bash匹配不同目录下的文件名

标签 bash shell scripting

我正在尝试编写一个 bash 脚本来搜索两个给定的目录,并将给我所有匹配的文件名和每个文件的信息

我不确定从哪里开始,我一直在尝试 diff、find、grep 并且无法使任何工作正常...任何建议将不胜感激。

我确实发现,如果我使用 diff -srq testdir1 testdir2 它匹配相同的文件,但如果一个文件的大小改变它不再匹配,我只需要按名称匹配。

最佳答案

你想加入

我有两个目录,ab:

ls a b
a:
1  2  23 3

b:
1 3 4

join 将逐行连接两个(排序的)文件并打印出公共(public)行:

$ join <(ls a) <(ls b)
1
3

Join 的工作原理是在每个文件的每一行中加入一个字段(字段由制表符和空格字符分隔)。默认情况下,这是第一个字段,但如果不是第一个,您可以指定字段编号。使用它,您可以使用 ls -l 并添加额外的文件信息:

$ join -1 9 -2 9 <(ls -l a) <(ls -l b)
 total 0 total 0
1 -rw-r--r-- 1 joeuser 5000 0 Sep 29 17:12 -rw-r--r-- 1 joeuser 5000 0 Sep 29 17:12
3 -rw-r--r-- 1 joeuser 5000 0 Sep 29 17:12 -rw-r--r-- 1 joeuser 5000 0 Sep 29 17:12

这会将两行合并为一行,因此您可以看到有关每个文件的信息(在我的示例中,它们是相同的,因为我同时创建了它们)。

使用此解决方案时,请注意如果文件名中包含非单词字符,ls 输出对于解析并不总是可靠:http://mywiki.wooledge.org/ParsingLs

关于bash - 如何使用bash匹配不同目录下的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19084748/

相关文章:

java - 在 MacOS 中使用 Java 程序执行 mysqldump

linux - 使用来自 shell 变量的 JSON 内容运行 curl 命令

linux - 如何在Shell脚本中多次检查if条件?

java - 向 ProcessBuilder 添加参数 - Java

android - 使用git时出现资源暂时不可用的错误

java - 在 OpenNLP 中训练命名实体

android - 如果路径包含空格,adb 命令将无法执行

java - 如何确定在脚本引擎中运行的 Groovy 代码中是否存在变量?

linux - 如何在 bash 中迭代包含多个动态变量的文件列表

bash - 如何从 bash 脚本(ubuntu)中的当前系统主题获取图标?