2014-04-22 64 views
0

我有不同的子目錄的目錄結構尾與版本名稱 像腳本:重命名和刪除重複的目錄

/drivers/i2c_v1  
/drivers/i2c_v1_0 
/drivers/i2c_v2_1 
/drivers/i2c_v3 
/drivers/spi_v1 
/drivers/spi_v2 
/drivers/spi_v2_0 
/drivers/spi_v2_1 

我需要/drivers/i2c重命名/drivers/i2c_v3和刪除drivers/i2c_v*/drivers/spi_v2_1/drivers/spi和刪除/drivers/spi_v*

最新版本的名稱應該用版本更少和剩餘版本重新命名ED應該是 DELETE。

任何幫助......

+0

'LS -v'可能是你的朋友,看到如[這裏](https://www.gnu.org/software/coreutils/manual/html_node/Details-about-version-sort.html) –

回答

1
prefixes=$(ls /drivers/*_v* | sed 's/_.*//' | uniq) 
for p in $prefixes; do 
    all=($(ls -vr ${p}_*)) # Sort in reverse version order 
    latest=${all[0]}  # So first one is highest version 
    mv $latest /drivers/temp # Rename it so it won't be deleted by wildcard below 
    if [[ ${#all[@]} > 1 ]]; then # Check that there's more than one version 
     rm -rf ${p}_*    # Remove the ones other than latest 
    fi 
    mv /drivers/temp ${p} # Rename it to the non-versioned name 
done 
+0

複雜但我喜歡 –

0

嘗試這樣的事情,如果你的文件名排序正確地排序或排序-n

fn=$(ls i2c* | sort -r | head -n1); mv -f "$fn" i2c; rm -f i2c_*