0

このファイルのリストがあり、それらをソートして名前を整数値でインクリメントしたいのですが、リストが 10 になるまでコードは正常に動作します。Linux の「sort」コマンドは、「10」の最初の「1」を解釈し、次のように考えます。これは 9 より小さい数です。これを機能させる方法はありますか?

これは、フォルダーをループしてファイル名をインクリメントするために作成したコードです。

#!/bin/bash

#set -x
ROOT=~/testing/
FILE_COUNT=$(ls -1 $ROOT | wc -l | awk '{print $1}')
COUNT=5

if [[ ${FILE_COUNT} -eq $COUNT ]]; then
    echo $COUNT backup files are there

    FILE_LIST=$(ls -1 $ROOT | sort -n -r)

    for file in $FILE_LIST; do
        echo $file
        file_new=`basename $file .zip`
        if [[ -e $ROOT$file ]]; then
            #mv $ROOT$file $ROOT${file_new%?}$COUNT.zip
            FILENUM=${file_new:${#file_new}-1}
            #echo "This is file # $FILENUM" next one is $(( FILENUM + 1 ))
            echo mv $ROOT$file $ROOT${file_new%?}$(( FILENUM + 1 )).zip
            mv $ROOT$file $ROOT${file_new%?}$(( FILENUM + 1 )).zip
        fi
        ((COUNT--))
    done
else
    echo Not $COUNT files, there are $FILE_COUNT
    COUNT=$FILE_COUNT
fi

そして、これらは並べ替え行の結果です。

macbookair:~ ilium007$ ls -l testing/ | sort -n -r -t "_"
total 40
-rw-r--r--  1 ilium007  staff  15 16 Nov 21:24 backup_9.zip
-rw-r--r--  1 ilium007  staff  15 16 Nov 21:24 backup_8.zip
-rw-r--r--  1 ilium007  staff  15 16 Nov 21:24 backup_7.zip
-rw-r--r--  1 ilium007  staff  15 16 Nov 21:24 backup_6.zip
-rw-r--r--  1 ilium007  staff  15 16 Nov 21:24 backup_10.zip

このファイルのリストを作成するにはどうすればよいですか:

backup_10.zip
backup_9.zip
backup_8.zip
backup_7.zip
backup_6.zip

どんな助けでも感謝します。

4

2 に答える 2

1

この場合、ソートするキーを指定する必要があります-k2

ls | sort -n -r -t "_" -k2
于 2012-11-16T11:36:42.807 に答える
0

このコードは最終的に機能しました:

#!/bin/bash

set -x
ROOT=~/testing/
FILE_COUNT=$(ls -1 $ROOT | wc -l | awk '{print $1}')
COUNT=5
FILENAME=("backup_19.zip"
"backup_2.zip
"backup_29.zip
"backup_38.zip")
for i in ${FILENAME[@]}; do
BASE_FILE_NAME=`basename $i .zip`
FILENUM=${BASE_FILE_NAME##*_}
NEW_FILE_NUM=$(( FILENUM + 1 ))
NEW_FILE_SUFFIX=$(( FILENUM + 1 )).zip
TEST=${BASE_FILE_NAME%%_*}_${NEW_FILE_SUFFIX}
done
exit
于 2012-11-17T06:41:52.680 に答える