파일 이름 접미사가 가장 작은 파일 삭제

파일 이름 접미사가 가장 작은 파일 삭제

이름은 비슷하지만 접미사 숫자가 늘어나는 파일 디렉터리가 있습니다. 접미사가 낮은 파일을 삭제하고 접미사가 가장 높은 파일만 유지하고 싶습니다. 다음은 샘플 파일 목록입니다.

1k_02.txt
1k_03.txt
1l_02.txt
1l_03.txt
1l_04.txt
2a_05.txt
2a_06.txt
4c_03.txt
4c_04.txt

위 목록을 다음 파일로 줄여야 합니다.

1k_03.txt
1l_04.txt
2a_06.txt
4c_04.txt

어디서부터 시작해야할지 모르겠지만 가능하다면 bash 명령을 원합니다.

답변1

복잡한관로:

파일 목록:

$ ls
1l_04.txt 2a_05.txt 4c_03.txt 1k_03.txt 1l_02.txt 4c_04.txt 2a_06.txt 1l_03.txt 1k_02.txt

printf "%s\n" * | sort -t'_' -k1,1 -k2nr | awk -F'_' 'a[$1]++' | xargs rm

결과:

$ printf "%s\n" *
1k_03.txt
1l_04.txt
2a_06.txt
4c_04.txt

답변2

그리고 zsh:

$ ls
1k_02.txt  1l_02.txt  1l_04.txt  2a_06.txt  4c_04.txt
1k_03.txt  1l_03.txt  2a_05.txt  4c_03.txt
$ (typeset -A seen; for f (*_*(nOn)) let 'seen[${f%_*}]++' && rm -- $f)
$ ls
1k_03.txt  1l_04.txt  2a_06.txt  4c_04.txt

(바라보다산술 표현식에서 연관 배열을 안전하게 사용하는 방법은 무엇입니까?let여기서 대신 사용하는 이유 ((...))).

관련 정보