BASH脚本,用于更改具有相同名称但不同情况的文件的名称

时间:2011-08-22 15:46:11

标签: bash case rename case-sensitive

我正在尝试编写一个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".

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

你有没有试过像

这样的东西
find $1 | sort -f | uniq -i -d -D

说明:

  • sort -f:忽略大小写
  • uniq -i -d -D:忽略大小写(-i),打印重复行(-d),打印所有重复行(-D)

从那里应该很容易意识到你想要做什么。