문제

상위 디렉토리에서 최신 디렉토리 4개를 제외하고 모두 삭제하고 싶습니다.Bash에서 이것을 어떻게 하시겠습니까?

도움이 되었습니까?

해결책

ls -atrd */ | head --lines=-4 | xargs rm -rf

편집하다: ls에 'a' 인수를 추가했습니다.

다른 팁

"4개의 최신 디렉토리를 제외한 모든 디렉토리 삭제" 또는 "4개의 최신 디렉토리를 제외한 모든(파일 및 디렉토리) 삭제"를 의미하는지 명확히 하십시오.

또한 디렉터리 생성 시간은 알려져 있지 않습니다.디렉토리가 마지막으로 수정된 시기, 즉 파일이 추가, 제거되거나 이름이 변경된 시기만 알 수 있습니다.

다음을 수행할 수 있습니다.

#!/bin/bash

#store the listing of current directory in var
mydir=`ls -t`
it=1

for file in $mydir
    do
        if [ $it -gt 5 ]
        then
            echo file $it will be deleted: $file
            #rm -rf $file
        fi
        it=$((it+1))
    done

(실제로 실행하려면 rm 앞의 #을 제거하세요;))

배열을 사용하여 BSD에 안전한 또 다른 방법(왜 안되죠?)

#!/bin/bash
ARRAY=( `ls -td */` )
ELEMENTS=${#ARRAY[@]}
COUNTER=4
while [ $COUNTER -lt $ELEMENTS ]; do
  echo ${ARRAY[${COUNTER}]}
  let COUNTER=COUNTER+1
done
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top