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

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

이름이 비슷하지만 접미사로 숫자가 증가하는 파일 디렉터리가 있습니다. 접미사가 낮은 파일을 제거하고 접미사가 가장 높은 파일만 유지하고 싶습니다. 다음은 파일 목록 예시입니다.

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여기 대신에 왜 우리가 사용하고 있는지 ((...))).

관련 정보