簡體   English   中英

用於重命名和重新排列文件的腳本shell

[英]Script shell for renaming and rearranging files

我想重新排列和重命名文件。 我有這種文件樹結構:

ada/rda/0.05/alpha1_freeSurface.md
ada/rda/0.05/p_freeSurface.md
ada/rda/0.05/U_freeSurface.md
ada/rda/0.1/alpha1_freeSurface.md
ada/rda/0.1/p_freeSurface.md
ada/rda/0.1/U_freeSurface.md

我想要重命名和重新排列文件,如下面的結構:

ada/rda/ada-0.05-alpha1.md
ada/rda/ada-0.05-p.md
ada/rda/ada-0.05-U.md
ada/rda/ada-0.1-alpha1.md
ada/rda/ada-0.1-p.md
ada/rda/ada-0.1-U.md

您可以使用basenamedirname函數重建新文件名:

get_new_name()
{
    oldname=$1
    prefix=$(basename $oldname _freeSurface.md)
    dname=$(dirname $oldname)
    basedir=$(dirname $dname)
    dname=$(basename $dname)
    echo "$basedir/ada-$dname-$prefix.md"
}

例如, get_new_name("ada/rda/0.05/alpha1_freeSurface.md")將在控制台中顯示ada/rda/ada-0.05-alpha1.md

然后,您可以遍歷所有文件並使用mv命令重命名文件。

使用perl rename (有時稱為prename )實用程序:

rename  's|ada/rda/([^/]*)/([^_]*).*|ada/rda/ada-$1-$2.md|' ada/rda/*/*

(注意:默認情況下,某些發行版會從util-linux軟件包安裝一個rename命令。此命令不兼容 。如果您有這樣的發行版,請查看perl版本是否在名稱prename下可用。)

這個怎么運作

rename將perl命令作為參數。 這里的參數由一個替換命令組成。 通過將substitute命令應用於舊名稱,可以找到該文件的新名稱。 這使我們不僅可以為文件指定新名稱,還可以為上面的新目錄。

更詳細地說,substitute命令看起來像s|old|new| 在我們的例子中, oldada/rda/([^/]*)/([^_]*).* 這將捕獲組2中的數字和組2中文件名的開頭(第一個_之前的部分)。 new部分是ada/rda/ada-$1-$2.md 這將使用兩個捕獲的組創建新文件名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM