2014-04-22 5 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*을 제거

등으로 꼬리되어있다

최신 버전은 버전을 더 적게 만들고 버전을 1로 수정해야합니다. 삭제. 당신의 파일 이름 정렬이 올바르게 정렬 또는 종류 -n 경우

어떤 도움 ...

+0

'1! -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

하는 것은, 예를 들어 참조

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