目录中文件差集对比脚本
#!/bin/bash

# 定义两个目录
# 目录地址自行修改
dir_root="/root"
dir1="/root/test1"
dir2="/root/test2"

# 使用find列出两个目录中的文件名,并通过sort排序,然后通过comm找出不同的文件名
diff_in_dir1=$(find "$dir1" -type f -printf '%f\n' | sort)
diff_in_dir2=$(find "$dir2" -type f -printf '%f\n' | sort)

# -comm -23 将显示只在第一个文件(dir1)中出现的行
# -comm -13 将显示只在第二个文件(dir2)中出现的行
unique_in_dir1=$(comm -23 <(echo "$diff_in_dir1") <(echo "$diff_in_dir2"))
unique_in_dir2=$(comm -13 <(echo "$diff_in_dir1") <(echo "$diff_in_dir2"))

# 显示只在 dir1 中存在的文件
echo -e "\033[31m只在 $dir1 中存在的文件:\033[0m\n\033[44;33m$unique_in_dir1\033[0m"
# 显示只在 dir2 中存在的文件
echo -e "\033[31m只在 $dir2 中存在的文件:\033[0m\n\033[44;33m$unique_in_dir2\033[0m\n"
# 创建两个数组来存储不同文件的完整路径
files_in_dir1=()
files_in_dir2=()

# 遍历 dir1 中独有的文件,并获取它们的完整路径
for file in $unique_in_dir1; do
    full_path=$(find "$dir_root" -name "$file" -type f)
    if [ -n "$full_path" ]; then
        files_in_dir1+=("$full_path")
    fi
done

# 遍历 dir2 中独有的文件,并获取它们的完整路径
for file in $unique_in_dir2; do
    full_path=$(find "$dir_root" -name "$file" -type f)
    if [ -n "$full_path" ]; then
        files_in_dir2+=("$full_path")
    fi
done

echo -e "\033[33m################################\033[0m\n\n"


# 打印数组的内容
echo -e "\033[31m只在 $dir1 中的文件路径:\033[0m\n\033[44;33m${files_in_dir1[@]}\033[0m"
echo -e "\033[31m只在 $dir2 中的文件路径:\033[0m\n\033[44;33m${files_in_dir2[@]}\033[0m"
read -p "确认继续下面的操作吗(y/n)?" check_sure


tasks (){
    dir1_num=$(ls -1rt $dir1 | wc -l)
    dir2_num=$(ls -1rt $dir2 | wc -l)
    if [ "${dir1_num}" -gt "${dir2_num}" ];then
        read -p "确定将$dir1目录差集的文件补到$dir2目录中吗(y/n)?   " sure
        case "$sure" in
        Y|y)
            for i in "${files_in_dir1[@]}";do
                cp -a $i $dir2
            done
                echo -e "\033[32m您已将$dir1目录差集的文件补录到$dir2目录中!\033[0m"
        ;;
        N|n)
            echo -e "\033[32m您没有执行差集补录操作,现已退出!\033[0m"
            exit 112
        ;;
        *)
            echo -e "\033[32m您输入有误,如需要,请重新运行脚本!\033[0m"
            exit 113
        ;;
        esac
    elif [ "${dir1_num}" -lt "${dir2_num}" ];then
        read -p "确定将$dir2目录差集的文件补到$dir1目录中吗(y/n)?   " sure
        case "$sure" in
        Y|y)
            for i in "${files_in_dir2[@]}";do
                cp -a $i $dir1
            done
            echo -e "\033[32m您已将$dir2目录差集的文件补录到$dir1目录中!\033[0m"
        ;;
        N|n)
            echo -e "\033[32m您没有执行差集补录操作,现已退出!\033[0m"
            exit 114
        ;;
        *)
            echo -e "\033[32m您输入有误,如需要,请重新运行脚本!\033[0m"
            exit 115
        ;;
        esac    
    elif [ "$dir1_num" -eq "$dir2_num" ];then
        echo -e "\033[36m$dir1和$dir2目录的文件数量一致,不需要补录!\033[0m"
    fi
}

case "$check_sure" in
Y|y)
    tasks
;;
N|n)
    echo -e "\033[33m您已退出!\033[0m"
    exit 116
;;
*)
    echo -e "\033[33m输入错误!\033[0m"
    exit 117
;;
esac
觉得有帮助可以投喂下博主哦~ 一分也是爱!感谢!
转载请注明文章地址及作者哦~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇