이름이 비슷하지만 접미사로 숫자가 증가하는 파일 디렉터리가 있습니다. 접미사가 낮은 파일을 제거하고 접미사가 가장 높은 파일만 유지하고 싶습니다. 다음은 파일 목록 예시입니다.
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
여기 대신에 왜 우리가 사용하고 있는지 ((...))
).