현재 디렉토리에서 마지막 두 파일을 제외한 모든 파일을 삭제하는 방법

현재 디렉토리에서 마지막 두 파일을 제외한 모든 파일을 삭제하는 방법

현재 디렉토리에 10개의 파일이 있다고 가정합니다 /home/usr. 그 번호는 1- 입니다 10. 9을 제외한 모든 파일을 삭제하려면 10어떻게 해야 하나요 ?

다음을 수행하여 아래쪽 두 파일을 선택할 수 있습니다

ls -l /home/usr/ | tail -2

하지만 이 정보를 사용하여 마지막 두 개를 제외한 모든 항목을 제거하려면 어떻게 해야 할까요? 즉, 1- 을 어떻게 제거합니까 8?

나는 뭔가를 명확히하고 싶다. ls -l파일 이름을 기준으로 삭제하지 않고 파일 목록을 기준으로 삭제 하고 싶습니다 . 그 1- 10문서는 예입니다. 특정 이름에 관계없이 파일을 삭제하고 ls -l.

답변1

그리고 zsh:

echo rm -f /home/usr/*(n[1,-3])

echo(만족하면 삭제)

  • n숫자순으로 정렬(10 이후 2)
  • [1,-3]첫 번째부터 세 번째부터 마지막까지만 선택하세요.

( D숨겨진 파일도 고려하려면 glob 한정자를 추가하세요)

답변2

별로 예쁘지 않은 비 zsh솔루션 :

find . -name 'prefix*' | sort -V | head -n -2 | xargs echo rm --

가정:

  1. 모든 파일이 동일한 파일 이름 접두사를 공유 prefix하고 이름에 줄 바꿈이나 기타 흥미로운 문자가 없다고 가정합니다.
  2. 귀하의 sort지원 -V과 정렬은 귀하의 경우 정확합니다 (단순 + 숫자 형식의 동일한 파일로 테스트했으며 build btw를 사용하여 prefix저에게 효과적이었습니다 ).touch prefix{1..100}bash
  3. 당신의 head지원 -n.

(현재의 모든 GNU/Linux 배포판은 이러한 매개변수를 지원해야 합니다.)

잠금을 해제하려면 제거하세요 echo.

답변3

파일 이름이 실제로 1에서 10까지인 경우 다음을 사용할 수 있습니다.

rm {1,8}

또는 범위를 나타내는 변형입니다 foobar{1,8}. 예: .

관련 정보