我可以帮助您进行翻译。需要翻译的内容涉及IT技术,具体是关于Linux机器上一个名为../TEMPO
的文件夹,里面有很多文件夹[A,B,C..Z],每个文件夹下又有三层子文件夹。其中一些深层次的文件夹名称是小写的,例如:
A/F/m/O
Z/t/q/S
在第四级目录中,有些文件我希望保持现有的文件名不变。
如何递归地将文件夹名称改为大写,而不更改特定文件夹 (
../TEMPO
) 中已存在的文件名?我可以帮助您进行翻译。需要翻译的内容涉及IT技术,具体是关于Linux机器上一个名为../TEMPO
的文件夹,里面有很多文件夹[A,B,C..Z],每个文件夹下又有三层子文件夹。其中一些深层次的文件夹名称是小写的,例如:
A/F/m/O
Z/t/q/S
../TEMPO
) 中已存在的文件名?请验证此命令的输出结果
find path/to/dir -type d | awk -F"/" '$NF != toupper($NF) {l = n = $0; sub($NF "$", toupper($NF), n); print "mv " l " " n;}' | tac
如果一切看起来正常,就把结果通过管道传递到sh中执行。
find path/to/dir -type d | awk -F"/" '$NF != toupper($NF) {l = n = $0; sub($NF "$", toupper($NF), n); print "mv " l " " n;}' | tac | sh
for dir in `find ./TEMPO -type d -regex '.*[a-z].*' -print` ; do
udir=`echo $dir | tr [a-z] [A-Z]`
mv $dir $udir
done
udir=${dir^^}
,而不必调用echo和tr函数。 - glenn jackmanrename
系统调用只能一次进行一项更改。rename
实用程序;我找不到它的文档,否则我会链接它。如果在shell提示符下键入man rename
,会出现类似于以下内容的东西:NAME
rename - renames multiple files
SYNOPSIS
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
如果你找到了正确的工具,那就太好了。不幸的是,至少还有一个同名的实用工具却与此毫无关系,唯一的区别在于试用它。
既然你知道有四个只含一个字符名称的目录级别,你可以按照以下方式枚举目录级别:
rename 'y/a-z/A-Z/ if -d $_' ?
rename 'y/a-z/A-Z/ if -d $_' ?/?
rename 'y/a-z/A-Z/ if -d $_' ?/?/?
rename 'y/a-z/A-Z/ if -d $_' ?/?/?/?
perl
中的prename
,那么您可以非常容易地完成这个任务:find ../TEMPO -depth -type d | xargs prename 's%/([^/]+)$%/\U$1%'
你可能需要先传递-n
给prename
,以验证它会执行正确的操作。