如何查找多个文件、检查重复文件并用 bash、sed 脚本替换
Posted
技术标签:
【中文标题】如何查找多个文件、检查重复文件并用 bash、sed 脚本替换【英文标题】:How to find multiple files, check for duplicates and replace with bash,sed script 【发布时间】: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
【问题讨论】:
【参考方案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 我的回答符合您的要求,因此请参阅***.com/help/someone-answers 了解下一步该做什么。以上是关于如何查找多个文件、检查重复文件并用 bash、sed 脚本替换的主要内容,如果未能解决你的问题,请参考以下文章