我需要將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. 將文件中的所有文本更改爲小寫
- 4. 使用Linux遞歸更改文件名?
- 5. 重命名批量文件並更改某些前綴並將它們更改
- 6. 如何將文件名更改爲小寫?
- 7. 如何遞歸捕獲對象的所有更改?
- 8. Mysql將所有表名改爲小寫
- 9. 查找遞歸今天的所有文件,並將它們複製
- 10. 將文件名更改爲buk中的標題大小寫
- 11. 遞歸文件更新
- 12. 如何將此樹遞歸更改爲尾遞歸?
- 13. Bash腳本遞歸地更改文件名
- 14. 如何將大文件拆分爲更小的文件(更友好的FTP),然後再合併它們?
- 15. ZEND Guard更改文件名大小寫
- 16. 如何更改大寫改爲小寫
- 17. 修改文件列表中的文件名並將它們添加爲新列
- 18. 更改ACL - 遞歸所有目錄Powershell
- 19. 如何將所有文件重命名爲小寫?
- 20. 如何將所有文本控制或更改爲大寫
- 21. 在/ template文件夾中查找所有* .tpl文件並遞歸地將它們chmod 666
- 22. 找到所有文件,並將它們複製到一個文件夾(遞歸地展開)
- 23. Libreoffice將所有單元格引用更改爲絕對/相對
- 24. 如何監視HAML文件的更改並保存它們
- 25. xslt如何遞歸地更改子節點的標記名稱
- 26. 如何將整列的大小寫更改爲小寫?
- 27. SSH以遞歸方式將所有子文件夾名稱更改爲特定名稱
- 28. 如何使用Jquery將所有輸入值更改爲大寫?
- 29. 更改Perforce文件的遞歸權限
- 30. 如何將cscript.exe更改爲所有VBScript文件的wscript.exe執行?
只是爲了澄清這是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