[英]How to find multiple files, check for duplicates and replace with bash,sed script
我正在寻找一个脚本,它可以帮助我在 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
你需要的是这样的(未经测试):
#!/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' \) )
完成测试并希望它实际执行mv
删除echo
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.