N개의 파일을 하위 디렉터리에 보관

N개의 파일을 하위 디렉터리에 보관

간단해 보이는 일을 하려고 하는데 알 수 없습니다.

여러 개의 하위 디렉터리가 있는 디렉터리가 있는데, 모두 여러 파일(jpg 파일)이 있습니다. 이 디렉터리에 4개 또는 N개의 파일만 보관하는 명령을 실행하고 싶습니다. 파일이 생성된 시기에 따라 관련 질문을 본 적이 있으므로 파일의 순서는 중요하지 않습니다.

나는 ls + head를 가지고 놀았고 -delete 옵션을 사용하여 루프에 find를 넣으려고 시도했지만 여전히 운이 없습니다.

답변1

어쩌면 다음과 같은 것일 수도 있습니다.

for dir in /target/dir/*/; do
  (cd -- "$dir" && set -- *.jpg && [ "$#" -gt 4 ] && shift 4 && rm -f -- "$@")
done

를 사용하면 zsh다음과 같이 단축할 수 있습니다.

for dir (/target/dir/*(/)) rm -f $dir/*.jpg(N[5,-1])

답변2

경로에 공백, 개행, 따옴표, 백슬래시 또는 유효하지 않은 문자가 없는 일반 파일이라고 가정합니다.

find /target/dir/ -type f \
  | awk '{t=$0; gsub(/\/[^/]*$/, "", t); if(a[t]++ < 4) print}' \
  | xargs rm --

유틸리티가 특정 확장자를 지원하는 경우 아래 설명을 참조하여 보다 흥미로운 파일 이름으로 조정하는 방법을 알아보세요.

관련 정보