【问题标题】:How to find multiple files, check for duplicates and replace with bash,sed script如何查找多个文件、检查重复文件并用 bash、sed 脚本替换
【发布时间】:2021-12-06 08:22:13
【问题描述】:

我正在寻找一个脚本,它可以帮助我在 bash 和 sed 命令的帮助下搜索具有扩展名 (.bak.alt) 的文件,然后更改文件的名称,如果它不存在的话.我的意思是搜索(*.bak.alt *.BAK.alt *.bak) 并用 (*.BAK) 替换它,如果它不存在并且应该在将它与旧的更改后比较新的然后做出反应, 如果它的内容和名称相同,则什么都不做,否则就改变它。

我在朋友的帮助下想出了一些东西,但它并不完整。

#!/bin/bash

        echo " Finds something.."

        find . -type f \( -name "*.bak.alt" \) > F1.txt
        cat F1.txt
        find . -type f \( -name "*.BAK.alt" \)> F2.txt
        cat F2.txt

        if diff F1.txt F2.txt
                then echo "everythings looks good":
        else
              sed -E 's/^\(.*)\.(bak|BAK)\.alt$/mv "&" "\1.BAK"/;e'| wc -l    echo " Files changed "
fi

参考: Rename series of files with 2 extentions by help of sed

【问题讨论】:

    标签: linux bash awk sed find


    【解决方案1】:

    你需要这样的东西(未经测试):

    #!/usr/bin/env bash
    shopt -s nocasematch
    
    while IFS= read -r old; do
        new="${old/%.alt}"
        new="${new/%.bak}"
        [[ ! -e "$new" ]] && echo mv -- "$old" "$new"
    done < <( find . -type f \( -name '*.bak.alt' -o -name '*.BAK.alt' -o -name '*.bak' \) )
    

    完成测试后删除echo,并希望它实际执行mv

    【讨论】:

    • 谢谢 Ed,这很好,但实际上我想搜索这样的文件:*.bak.alt *.BAK.alt *.bak 如果它不存在,则用 .BAK 替换它
    • 好吧,这不是你的脚本看起来的样子。请编辑您的问题以提供示例输入和预期输出。
    • 现在明白了吗??
    • 然后编辑您的问题以将该参考以及包含为示例输入/输出,以便您的问题独立存在。
    • AFAIK 我的回答符合您的要求,因此请参阅stackoverflow.com/help/someone-answers 了解下一步该做什么。
    猜你喜欢
    • 2015-05-14
    • 2017-09-12
    • 2012-08-29
    • 2015-02-01
    • 2017-03-10
    • 1970-01-01
    • 2012-02-14
    • 2018-12-26
    • 2013-04-30
    相关资源
    最近更新 更多