linux中 目录和 目录的区别,bash - Linux中两个目录的区别

对所有回复都不满意,因为大多数回复工作得非常慢并且为大型目录产生不必要的长输出,我编写了自己的Python脚本来比较两个文件夹。

与许多其他解决方案不同,它不会比较文件的内容。 此外,它不会进入另一个目录中缺少的子目录。 因此输出非常简洁,脚本运行速度很快。

#!/usr/bin/env python3

import os, sys

def compare_dirs(d1: "old directory name", d2: "new directory name"):

def print_local(a, msg):

print('DIR ' if a[2] else 'FILE', a[1], msg)

# ensure validity

for d in [d1,d2]:

if not os.path.isdir(d):

raise ValueError("not a directory: " + d)

# get relative path

l1 = [(x,os.path.join(d1,x)) for x in os.listdir(d1)]

l2 = [(x,os.path.join(d2,x)) for x in os.listdir(d2)]

# determine type: directory or file?

l1 = sorted([(x,y,os.path.isdir(y)) for x,y in l1])

l2 = sorted([(x,y,os.path.isdir(y)) for x,y in l2])

i1 = i2 = 0

common_dirs = []

while i1

if l1[i1][0] == l2[i2][0]: # same name

if l1[i1][2] == l2[i2][2]: # same type

if l1[i1][2]: # remember this folder for recursion

common_dirs.append((l1[i1][1], l2[i2][1]))

else:

print_local(l1[i1],'type changed')

i1 += 1

i2 += 1

elif l1[i1][0]

print_local(l1[i1],'removed')

i1 += 1

elif l1[i1][0]>l2[i2][0]:

print_local(l2[i2],'added')

i2 += 1

while i1

print_local(l1[i1],'removed')

i1 += 1

while i2

print_local(l2[i2],'added')

i2 += 1

# compare subfolders recursively

for sd1,sd2 in common_dirs:

compare_dirs(sd1, sd2)

if __name__=="__main__":

compare_dirs(sys.argv[1], sys.argv[2])

样品用法:

user@laptop:~$ python3 compare_dirs.py dir1/ dir2/

DIR dir1/out/flavor-domino removed

DIR dir2/out/flavor-maxim2 added

DIR dir1/target/vendor/flavor-domino removed

DIR dir2/target/vendor/flavor-maxim2 added

FILE dir1/tmp/.kconfig-flavor_domino removed

FILE dir2/tmp/.kconfig-flavor_maxim2 added

DIR dir2/tools/tools/LiveSuit_For_Linux64 added

或者,如果您只想查看第一个目录中的文件:

user@laptop:~$ python3 compare_dirs.py dir2/ dir1/ | grep dir1

DIR dir1/out/flavor-domino added

DIR dir1/target/vendor/flavor-domino added

FILE dir1/tmp/.kconfig-flavor_domino added

附: 如果你需要比较文件大小和文件哈希值以进行潜在的更改,我在这里发布了一个更新的脚本:[https://gist.github.com/amakukha/f489cbde2afd32817f8e866cf4abe779]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值