我正在尝试编写一个 bash 脚本来搜索两个给定的目录,并将给我所有匹配的文件名和每个文件的信息
我不确定从哪里开始,我一直在尝试 diff、find、grep 并且无法使任何工作正常...任何建议将不胜感激。
我确实发现,如果我使用 diff -srq testdir1 testdir2 它匹配相同的文件,但如果一个文件的大小改变它不再匹配,我只需要按名称匹配。
最佳答案
你想加入
。
我有两个目录,a
和 b
:
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/