我需要将MathJax库中的所有文件重命名为小写,并更新所有对它们的引用以符合一些SVN限制。有没有人有一个bash脚本会为我做这个?谢谢。如何递归地将文件名更改为小写并更新对它们的所有引用?
1
A
回答
1
为了将文件从大写重命名为小写,可以使用rename命令。在这种情况下,你可以输入包含库文件的目录,然后运行下面的命令来重新命名所有以小写的文件:
find . -exec readlink -e '{}' \; | xargs rename 'y/A-Z/a-z/'
让我知道尝试这种出后您的反馈意见。
0
这是我想出的解决方案。该脚本基于另一个堆栈溢出回答:How to create a bash script that will lower case all files in the current folder, then search/replace in all files?。我只是将它改为遍历整个目录树。这难倒我了,而有一两件事是需要-i选项后提供一个空字符串sed将得到它与Mac OS X的工作:
#!/bin/bash
find . -type f -name '*.js' -print0 | while IFS= read -r -d '' file; do
#Check to see if the filename contains any uppercase characters
oldfilename=$(basename $file)
iscap=`echo $oldfilename | awk '{if ($0 ~ /[[:upper:]]/) print }'`
if [[ -n $iscap ]]
then
#If the filename contains upper case characters convert them to lower case
newname=`echo $oldfilename | tr '[A-Z]' '[a-z]'` #make lower case
#Perform various search/replaces on the file name to clean things up
newname=$(echo "$newname" | sed 's/---/-/')
newname=$(echo "$newname" | sed 's/--/-/')
newname=$(echo "$newname" | sed 's/-\./\./')
newname=$(echo "$newname" | sed 's/there-s-/theres-/')
#Rename file
newpathandfile=$(dirname $file)/$newname
echo "Moving $file\n To $newpathandfile\n\n"
mv $file $newpathandfile
#Update all references to the new filename in all php files
find . -type f -name '*.js' -print0 | while IFS= read -r -d '' thisfile; do
sed -i '' -e "s/$oldfilename/$newname/g" $thisfile
echo "$thisfile s/$oldfilename/$newname/g"
done
fi
done
我改名目录部分由脚本和部分手动。还有其他类型的文件(特别是网络字体),我可以使用此脚本进行重命名,但通过指定适当的文件扩展名。
MathJax自定义的最后一步涉及将小写进入config.root的值。我找不到任何必须将整个MathJax库转换为小写文件和目录名的其他人,因此这个问题/答案的一部分对其他人可能没有多大价值。
我想出的脚本需要一段时间才能运行,但这对我来说不是问题;我不认为我会再次运行它!
相关问题
- 1. 如何更改文件名递归的大小写?
- 2. 将文件中的所有文本更改为小写
- 3. 使用Linux递归更改文件名?
- 4. 重命名批量文件并更改某些前缀并将它们更改
- 5. 如何递归捕获对象的所有更改?
- 6. 将文件名更改为buk中的标题大小写
- 7. ZEND Guard更改文件名大小写
- 8. 修改文件列表中的文件名并将它们添加为新列
- 9. 如何将所有文本控制或更改为大写
- 10. xslt如何递归地更改子节点的标记名称
- 11. 如何监视HAML文件的更改并保存它们
- 12. 如何将整列的大小写更改为小写?
- 13. SSH以递归方式将所有子文件夹名称更改为特定名称
- 14. 如何使用Jquery将所有输入值更改为大写?
- 15. 更新一列的所有值小写
- 16. 如何将cscript.exe更改为所有VBScript文件的wscript.exe执行?
- 17. 将递归方法更改为迭代
- 18. 将递归循环更改为迭代
- 19. 如何递归通过字典并动态更新值以便稍后可以引用它们?
- 20. 如何在Vim中一次将文件中的所有指定单词从大写更改为小写?
- 21. 如何使用Xcode列出为提交而更改的所有文件并查看每个文件的更改?
- 22. 更改日期到列表中的所有对象,并更新
- 23. 如何使用MSBuild递归地xcopy修改或新文件?
- 24. 如何将递归方法更改为js中的非递归方法
- 25. 重写所有网址将aspx扩展名更改为html
- 26. 如何使用每日更改的文件名更新程序?
- 27. 使用大小写和递归重命名文件扩展名
- 28. 如何将所有CSS文件更改为SCSS
- 29. UIImage只在iPhone上加载,如果我将文件名更改为小写
- 30. 如何使用makefile更改所有文件扩展名
只是为了澄清这是Larry Wall.s'rename',而不是util-linux'rename'。在这里讨论。 http://oylenshpeegul.typepad.com/blog/2011/12/a-tale-of-two-renames.html – Jasen 2015-01-09 21:38:42
很好的答案。理论上,你不需要'xargs'。 'rename'参数表示文件名可以从标准输入读取。 – zerodiff 2015-01-09 21:55:58
这是最简单的部分。该请求还说“...并更新对它们的所有引用”,这是可以理解的,因为更改库包中的文件名可能会导致它中断。 – rici 2015-01-10 01:18:15