现在,我的代码看起来是这样的:
#!/bin/bash
Dir1=$1
Dir2=$2
for file1 in $Dir1/*; do
for file2 in $Dir2/*; do
if [[ $file1 == $file2 ]]; then
echo "$file1 is contained in both directories"
fi
done
done
我试图比较输入的两个目录的文件名,如果文件名匹配,则说明该文件在两个目录中。当我试图运行它,虽然没有任何回声,即使我有相同的文件在两个目录。
5条答案
按热度按时间vwoqyblh1#
同时位于
Dir1
和Dir2
中的文件:在
Dir1
中但不在Dir2
中的文件:在
Dir2
中但不在Dir1
中的文件:enyaitl32#
如果你想知道两个目录有什么共同点,那么这是另一种编码更少的方法。
有关
comm
实用程序的详细信息,请参阅man comm
。cpjpxq1n3#
它不起作用,因为您正在比较包含目录前缀的变量。在比较之前删除前缀:
此外,嵌套循环似乎是一种效率低下的方法。您只需要从一个目录中获取文件名,并对另一个目录使用简单的文件存在检查。
z6psavjg4#
我刚刚测试了一下,它工作了:
lokaqttq5#
比较失败,因为
Dir1/foo
与Dir2/foo
不同。相反,如果您更改到一个目录,您的*
将仅扩展到文件名:请注意,这只匹配file names。如果你想确保它们确实是同一个文件,你应该使用
cmp
来比较它们。