将文件从大写重命名为小写

将文件从大写重命名为小写

我需要详细说明一下。这些命令实际上是针对 BBS FTN 投掷者的。这些命令所在的配置文件只允许特定的声明。这里有一些例子:

exec "/home/imp/imp/poll.sh" *.su? *.mo? *.tu? *.we? *th? *.fr? *.sa? *.pkt
flag toss!.now [0-9a-Z][0-9a-Z][0-9a-Z][0-9a-Z][0-9a-Z][0-9a-Z][0-9a-Z][0-9a-Z].???
exec "/home/imp/imp/poll.sh /home/imp/hpt/secure" /home/imp/hpt/secure/*.[STFWMstfWM][ouaherOUAHER][0-9A-ZA-a] *.[pP][kK][tT]

这就是为什么我想使用该语法([0-9a-z](例如))。问题是邮件程序正在寻找小写文件名,但只存在大写文件名。

我正在尝试使用以下语法将文件从大写转换为小写:

mv /home/imp/hpt/outbound/[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z].[STFWMfWM][OUAHER][0-9] /home/imp/hpt/outbound/[0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z].[stfwm][ouaher][0-9a-za-a]

我认为我的语法不正确。

这是我要重命名的文件名的示例:

0000FE70.FR0

非常感谢任何和所有的帮助。谢谢。

答案1

每当您想要将一类字符更改为另一类字符时,请使用tr.

for f in *; do
    test -f "$f" && echo mv "$f" "$( tr '[:upper:]' '[:lower:]' <<<"$f" )"
done

该脚本会将当前目录中的所有文件重命名为全部小写字母。它将跳过目录。echo当您确定它能满足您的要求时,请将其删除。如果您只有标准 ASCII 文件名(注意:,而不是),则可以分别将[:upper:]和替换[:lower:]为 和A-Za-zA-Z[A-Z]

或者,使用 Bash 内置的从大写到小写的变量替换:

for f in *; do
    test -f "$f" && echo mv "$f" "${f,,}"
done

答案2

这个答案来自 Stack Overflow 的 Alex B 将帮助您重命名目录下的文件和子文件夹。

它包括使用findLinuxrename命令。我只想补充一点,上面链接中提供的命令也会修改目录名称。如果您只想更改文件名,则需要更改-depth下一个选项:-type f

该命令的另一个正则表达式rename可能是下面的,我认为它更容易理解。

 find my_root_dir -type f -execdir rename 'y/A-Z/a-z/' {} \;

rename请注意,命令正则表达式和大括号之间有一个必要的空格,并且它们和命令终止字符之间也有一个空格\;

另请记住,它不仅会重命名您执行命令的目录(目录my_root_dir)中的每个文件,还会重命名该目录中包含的每个子文件夹下的所有文件。您可以使用-maxdepth 0该命令的选项find来强制它仅将测试和操作应用于起点本身。

答案3

zsh

autoload zmv # best in ~/.zshrc
zmv '[[:alnum:]](#c8).[STFWMfWM][OUAHER][0-9]' '${(L)f}'

这需要检查潜在的冲突。

答案4

rename-lower当前目录的简单脚本,如果rename命令不起作用,您可以在 mv 中更改。

#/bin/bash
# script to replace all upper case to lower case
for i in *
do
        d=$(echo ${i} |tr [:upper:] [:lower:]);
        if [ ${d} != ${i} ]
        then
                echo "renaming:" ${i} ${d}
                rename ${i} ${d} ${i}
#               mv ${i} ${d}
        fi
done

例子

$ ls
tmp.EwcM2s6kfU  tmp.kcUX6rtjiu  tmp.kzpqLvWcnQ  tmp.N1H8bLt1at

$ rename-lower
renaming: tmp.EwcM2s6kfU  tmp.ewcm2s6kfu
renaming: tmp.kcUX6rtjiu  tmp.kcux6rtjiu
renaming: tmp.kzpqLvWcnQ  tmp.kzpqlvwcnq
renaming: tmp.N1H8bLt1at  tmp.n1h8blt1at

相关内容