我正在尝试编写一个bash脚本,该脚本将递归搜索目录,查找具有相同名称但不同情况的文件,并重命名它们。
例如,包含file.txt和File.txt的目录,file.txt将保留,File.txt将为File.0(或任何数字,只要保留两个副本。)
这是我的代码,虽然我看到了问题。扫描重复名称的行正在更改文件路径中的大小写,使其无效。我想不出一种方法来检测重复项而不删除路径中的大小写。
#!/bin/bash
#Scan for duplicates
find $1 -name "*"| tr 'A-Z' 'a-z' | sort | uniq -d > ~/case.tmp
#Count changes
i=0
#Make changes
for line in `cat ~/case.tmp`
do mv $line $line.$i
let i++
done
#Print Results
echo "$i file(s) renamed".
感谢您的帮助。
答案 0 :(得分:2)
你有没有试过像
这样的东西find $1 | sort -f | uniq -i -d -D
说明:
sort -f
:忽略大小写uniq -i -d -D
:忽略大小写(-i),打印重复行(-d),打印所有重复行(-D)从那里应该很容易意识到你想要做什么。