LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 8467|回复: 6

如何快速把带有大写字母的文件名改为全部小写?

[复制链接]
发表于 2003-4-16 23:02:07 | 显示全部楼层 |阅读模式
cp/mv等命令可以吗?
发表于 2003-4-16 23:22:37 | 显示全部楼层
方法很多,下面是其中一个:
$tr 'A-Z' 'a-z' <filename
 楼主| 发表于 2003-4-16 23:31:47 | 显示全部楼层

试了一下,没成功,

提示:bash: *.*: ambiguous redirect
我把filename改为了*.*。
请教一下这是什么原因。
我想把一个文件夹里的所有文件都改名,没有子文件夹。
 楼主| 发表于 2003-4-16 23:37:02 | 显示全部楼层

哈哈,在伊甸园找到办法了。

20.11 如何将大写文件名转换为小写文件名

A: 小四

如果要处理整个目录树的话,可以这样

find -exec sh -c 'mv -f "$0" `echo "$0" | tr "[A-Z]" "[a-z]"` > /de
v/null 2>&1' {} \;

同理,将小写文件名转换为大写文件名如下

find -exec sh -c 'mv -f "$0" `echo "$0" | tr "[a-z]" "[A-Z]"` > /de
v/null 2>&1' {} \;

这个办法有待修正,处理多层目录名本身带有大写字母的情况,有问题。比如存在如
下目录的时候,./A/B/C/D.txt。

A: Potash@www.linuxforum.net 2002-02-05 18:58

--------------------------------------------------------------------------
#! /bin/sh
# Usage: ./loworup.sh <-l | -u>

#
# 第二形参必须是目录,第一形参指定-l或-u
#
if [ $# -ne 2 ] ; then
echo "Usage: ${0} <-l | -u> "
exit 1
fi

if [ ! -d ${2} -o "${1}" != "-l" -a "${1}" != "-u" ] ; then
echo "Usage: ${0} <-l | -u> "
exit 1
fi

exec 1>/dev/null 2>&1

dir=`dirname "${2}"`
cd ${dir}

if [ "${1}" = "-l" ] ; then
base=`basename "${2}" | tr "[A-Z]" "[a-z]"`
else
base=`basename "${2}" | tr "[a-z]" "[A-Z]"`
fi

mv -f "`basename ${2}`" "${base}"

for entry in `find ${base}`
do
before="."
#
# 这个办法依赖for in语法,用空格做分隔符,所以不能处理那些本身名字带空
# 格的目录项,属于小BUG
#
for after in `echo "${entry}" | sed -e 's,/, ,g'`
do
tmp_entry="${before}/${after}"
if [ "${1}" = "-l" ] ; then
before=`echo "${tmp_entry}" | tr "[A-Z]" "[a-z]"`
else
before=`echo "${tmp_entry}" | tr "[a-z]" "[A-Z]"`
fi
mv -f "${tmp_entry}" "${before}"
done
done
发表于 2003-4-17 10:10:15 | 显示全部楼层
哦~,原来是改文件名!我那个是改文件中的内容.SORRY!
发表于 2003-4-19 20:01:12 | 显示全部楼层
将一个目录下的所有文件名友大写转为小写的教本
来自:www.linuxchinapub.com
vi change_name
#!/bin/bash
for f in *;do
mv $f `echo $f |tr "[A-Z]" "[a-z]"`
done
保存后在要转换的目录下执行
sh /path/to/change_name

修改后的:
javalee//home/javalee/lx>for i in *
> do
> if [[ -d $i ]]       #加个检测条件
> then
> mv $i $(echo $i|tr 'A-Z' 'a-z')
> fi
> done

发表于 2010-4-8 12:44:20 | 显示全部楼层
for fname in *; do mv $fname `echo $fname|tr [A-Z] [a-z]`; done
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表