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

ign*_*ius 4 shell

我需要详细说明一点。这些命令实际上是针对 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]
Run Code Online (Sandbox Code Playgroud)

所以这就是为什么我要使用该语法([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]
Run Code Online (Sandbox Code Playgroud)

我认为我的语法不正确。

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

0000FE70.FR0

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

Kus*_*nda 5

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

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

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

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

for f in *; do
    test -f "$f" && echo mv "$f" "${f,,}"
done
Run Code Online (Sandbox Code Playgroud)