현재 디렉토리에 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 --
가정:
- 모든 파일이 동일한 파일 이름 접두사를 공유
prefix
하고 이름에 줄 바꿈이나 기타 흥미로운 문자가 없다고 가정합니다. - 귀하의
sort
지원-V
과 정렬은 귀하의 경우 정확합니다 (단순 + 숫자 형식의 동일한 파일로 테스트했으며 build btw를 사용하여prefix
저에게 효과적이었습니다 ).touch prefix{1..100}
bash
- 당신의
head
지원-n
.
(현재의 모든 GNU/Linux 배포판은 이러한 매개변수를 지원해야 합니다.)
잠금을 해제하려면 제거하세요 echo
.
답변3
파일 이름이 실제로 1에서 10까지인 경우 다음을 사용할 수 있습니다.
rm {1,8}
또는 범위를 나타내는 변형입니다 foobar{1,8}
. 예: .