간단해 보이는 일을 하려고 하는데 알 수 없습니다.
여러 개의 하위 디렉터리가 있는 디렉터리가 있는데, 모두 여러 파일(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 --
유틸리티가 특정 확장자를 지원하는 경우 아래 설명을 참조하여 보다 흥미로운 파일 이름으로 조정하는 방법을 알아보세요.