【问题标题】:BASH script to change names on files with same name but differing cases用于更改具有相同名称但不同情况的文件的名称的 BASH 脚本
【发布时间】:2011-11-01 06:38:45
【问题描述】:

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

感谢您的帮助。

【问题讨论】:

    标签: bash case rename case-sensitive


    【解决方案1】:

    你有没有尝试过类似的东西

    find $1 | sort -f | uniq -i -d -D
    

    解释:

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

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

    【讨论】:

    • 谢谢,这让我能够检测到重复项并在名称上附加一个数字而不是重命名它们,这也可以。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2020-04-04
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多