경로의 특정 패턴을 기반으로 일부 파일을 찾고 싶습니다. 그런 다음 해당 패턴의 최신 파일 3개와 삭제하려는 다른 파일만 유지하고 싶습니다.
답변1
그리고 zsh
:
echo rm -f ./**/*pattern*(.Dom[4,-1])
**/
모든 수준의 하위 디렉터리(...)
glob 한정자는 다른 기준에 따라 일치 항목을 제한합니다..
:일반 파일만 해당D
: 도트 파일(숨겨진 파일)을 포함하고 숨겨진 디렉터리를 봅니다.om
: 수정 시간을 기준으로 정렬(최신 항목부터 오래된 항목 순)[4,-1]
: 4번째부터 마지막 까지 (따라서 처음 3개는 생략)
echo
( 실제 실행을 위해 삭제됨 )
POSIX 셸 및 이에 상응하는 GNU 유틸리티를 사용하려면 다음을 수행하세요.
(export LC_ALL=C
find . -name '*pattern*' -type f -printf '%T@/%p\0' |
sort -zrn |
tail -zn +4 |
cut -zd/ -f2- |
xargs -r0 echo rm -f)
echo
( 실제 실행을 위해 삭제됨 )
이전 버전의 GNU 유틸리티를 사용하면 다음을 수행해야 할 수 있습니다.
(export LC_ALL=C
find . -name '*pattern*' -type f -printf '%T@/%p\0' |
tr '\n\0' '\0\n' |
sort -rn |
tail -n +4 |
cut -d/ -f2- |
tr '\n\0' '\0\n' |
xargs -r0 echo rm -f)
답변2
글쎄, 정렬에는 그에 대한 논리가 필요하지만 지금까지는 다음과 같습니다.
# 찾으려는 파일이 포함된 배열을 만듭니다. 파일=$(${PATH_TO_FOLDER} 찾기 -f 유형 -이름 "whatever.whatever") # 배열의 전체 크기를 구합니다 총 크기=${#FILES[@]} # 전체 크기에서 3을 빼서 임계값을 만듭니다. 중지=((${totalSize}-3)) # 카운터를 0으로 선언 카운터=0 # 배열의 파일을 하나씩 반복합니다. "${FILES[@]}"에 있는 파일의 경우 하다 # 3개의 파일이 남을 때까지 꼭 해주세요 while [ ${counter} -le ${stopat} ] 하다 rm -v ${파일} ((카운터++)) 완벽한 완벽한
또는 등 -name
의 확장된 표현을 사용할 수 있습니다 .*.sh
hello*.sh
*hello.sh
위 명령은 3을 제외한 모든 파일을 삭제합니다. 이 명령을 사용하여 sort
필요에 따라(크기, 생성 또는 수정 날짜 사용) 파일을 정렬하십시오.
FILES=$(find ${PATH_TO_FOLDER} -type f -name "whatever.whatever")