文件大小相同但文件名不同的两个目录之间的差异
Diff between two directories with the same file sizes but different file names
我有两个目录,分别是 D1 和 D2。它们都包含相同数量的文件,这些文件大小相同但名称不同。假设 D1 包含 f1、f2 和 f3,而 D2 包含 ff1、ff2 和 ff3。
在这种情况下,我想在 f1 & ff1、f2 & ff2 和 f3 & ff3 之间进行区分。
我该怎么做?
棘手。假设您确定要比较名称不同但大小相同的文件 - 如果源 (D1) 和目标 (D2) 中有多个相同大小的文件,此解决方案将清楚地显示错误结果) 目录.
先尝试获取两个列表:
eval "declare -gA sizes1=( $(find D1 -printf "[%s]=%p\n") )"
eval "declare -gA sizes2=( $(find D2 -printf "[%s]=%p\n") )"
现在,遍历它们并执行你的 diff
:
for item in ${!sizes1[@]} ; do
echo === testing ${sizes1[$item]} against ${sizes2[$item]} =====;
diff ${sizes1[$item]} ${sizes2[$item]};
done
希望对您有所帮助,并指明您想要的方向。
假设:
- 相应的文件具有相同的大小
- 同一目录下没有两个文件大小相同
- 文件名很简单(文件名中没有空格或换行符等有趣的符号)
那么你可以这样做:
ls -1S d1/* d2/* | while read f1; read f2; do echo "diff $f1 vs $f2"; diff "$f1" "$f2"; done
为什么这样做:
ls -1S d1/* d2/*
: 这将创建 d1
和 d2
中所有文件的列表,按大小排序。这意味着两个连续文件具有相同大小的列表。
while read f1; read f2; do
: 这会读取两个条目。
在一个简单的测试中,这给了我以下输出:
diff d1/f3 d2/ff1
1c1
< 11
---
> 12
diff d1/f2 d2/ff2
diff d1/f1 d2/ff3
这里f1和ff3为空,f2和ff2相同1个字符,f3和ff1不同2个字符
我有两个目录,分别是 D1 和 D2。它们都包含相同数量的文件,这些文件大小相同但名称不同。假设 D1 包含 f1、f2 和 f3,而 D2 包含 ff1、ff2 和 ff3。 在这种情况下,我想在 f1 & ff1、f2 & ff2 和 f3 & ff3 之间进行区分。 我该怎么做?
棘手。假设您确定要比较名称不同但大小相同的文件 - 如果源 (D1) 和目标 (D2) 中有多个相同大小的文件,此解决方案将清楚地显示错误结果) 目录.
先尝试获取两个列表:
eval "declare -gA sizes1=( $(find D1 -printf "[%s]=%p\n") )"
eval "declare -gA sizes2=( $(find D2 -printf "[%s]=%p\n") )"
现在,遍历它们并执行你的 diff
:
for item in ${!sizes1[@]} ; do
echo === testing ${sizes1[$item]} against ${sizes2[$item]} =====;
diff ${sizes1[$item]} ${sizes2[$item]};
done
希望对您有所帮助,并指明您想要的方向。
假设:
- 相应的文件具有相同的大小
- 同一目录下没有两个文件大小相同
- 文件名很简单(文件名中没有空格或换行符等有趣的符号)
那么你可以这样做:
ls -1S d1/* d2/* | while read f1; read f2; do echo "diff $f1 vs $f2"; diff "$f1" "$f2"; done
为什么这样做:
ls -1S d1/* d2/*
: 这将创建d1
和d2
中所有文件的列表,按大小排序。这意味着两个连续文件具有相同大小的列表。while read f1; read f2; do
: 这会读取两个条目。
在一个简单的测试中,这给了我以下输出:
diff d1/f3 d2/ff1
1c1
< 11
---
> 12
diff d1/f2 d2/ff2
diff d1/f1 d2/ff3
这里f1和ff3为空,f2和ff2相同1个字符,f3和ff1不同2个字符