将整个目录树更改为小写名称


12

我正在进行网站转换。从Web服务器链接和提供的文件不区分大小写。但是,我已经在Linux系统上转储了该站点,并且正在编写脚本来迁移数据。问题是我遇到了页面中的链接字符串与文件系统上的实际单词大小写之间的区分大小写问题。

例如,页面可能有一个链接,<a href='/subfolder/PageName.asp'>而实际文件是/subfolder/pagename.asp。与图像相同- <img src='spacer_sm.gif'>可能是Spacer_Sm.gif

因此,我的想法是将所有目录和文件名更改为网站下载的小写字母。我该怎么做(可能会有更好的方法吗?)

即使有些unix命令具有不区分大小写的开关,但我使用的是php,因此并非所有文件系统命令都具有区分大小写的选项。


2
看到类似的先前问题。我在这里重新张贴了一个更简单的答案,因为问题更加具体。
吉尔斯(Gillles)“所以-别再邪恶了”,

Answers:


8

我不知道您的Unix风味是否带有rename。如果您搜索存储库,则许多Linux都具有并且它是perl软件包的一部分。

find ./ -depth -exec rename -n 'y/[A-Z]/[a-z]/' {} ";"

以上版本

rename -n 

并不会真正执行操作,而只是打印将要执行的操作。您忽略了-n来实现它。


什么是“语言”或正则表达式'y/[A-Z]/[a-z]/'
user394 2011年

好吧,由于我是perl的rename一部分,所以它是perl包的一部分,但是该模式也用在sed了其中,也许也用在了其中AWK。我只知道sed安静。我翻译ytranslatemap,但我不知道字符的来源。
用户未知

必须是perl regex-Gilles在他的回答中说这rename是perl脚本。
user394

是的,您可以使用perl正则表达式来修改文件名,这不一定是用perl编写的结论,但这可能是更有趣的问题。
用户未知,

9

sh

zmv -o-i '(**/)(*)' '$1${2:l}'

说明: zmv根据给定的替换文本重命名与模式匹配的文件。-o-i-i选项传递给幕后的每个mv命令(请参见下文)。在替换的文本,$1$2,等等,都是在图案中的连续带括号的组。**递归地表示所有(子)*目录。最后(/)的不是带括号的组,而是全局限定符,意为仅匹配目录。${2:l}转换$2为小写。

Perl重命名

在这里,我使用Debian和Ubuntu附带的Perl重命名脚本/usr/bin/prename(通常也可用rename)。如果bash≥4或zsh:

shopt -s globstar  # only in bash
rename 's!/([^/]*/?)$!\L/$1!' **/*

与其他壳:

find . -depth -exec rename -n 's!/([^/]*/?)$!\L/$1!' {} +

随身携带

递归地:

find . -depth -exec sh -c '
    t=${0%/*}/$(printf %s "${0##*/}" | tr "[:upper:]" "[:lower:]");
    [ "$t" = "$0" ] || mv -i "$0" "$t"
' {} \;

使用-depth确保深度嵌套目录在其祖先之前得到处理。


1

它不适用于以下目录结构:

JKL/
deF/
ABC/DEf
ABC/gHi
ghi/jkL

这是一个有效的示例:

for i in `find | sort -r | sed '$d'`; do \
   b=${i%/*}; e=${i##*/}; mv $i $b'/'${e,,}; done

有关说明be var:

man bash

然后使用以下键序列: /,,Enterbb


0

接受的答案对我不起作用,因为它试图立即更改所有目录。我发现了stackexchange上的另一种解决方案,与上面Gilles的便携式解决方案非常相似:来自Baramin-
https

我已经在这里复制了它:

find . -depth | \
while read LONG; do
   SHORT=$( basename "$LONG" | tr '[:lower:]' '[:upper:]' )
   DIR=$( dirname "$LONG" )
   if [ "${LONG}" != "${DIR}/${SHORT}"  ]; then
     mv "${LONG}" "${DIR}/${SHORT}"
   fi
done

我将tr命令更改为:sed s / cat / dog / g

非常感谢巴拉明在上面的链接。ie

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.