이 찾기 명령을 실행하면 다음과 같습니다.
find /html/car_images/inventory/ -type f -iname \*.jpg -mtime -4
나는 다음과 같은 결과를 얻습니다.
/html/car_images/inventory/16031/16031_06.jpg
/html/car_images/inventory/16117/16117_01.jpg
/html/car_images/inventory/16126/16126_01.jpg
/html/car_images/inventory/16115/16115_01.jpg
/html/car_images/inventory/16128/16128_02.jpg
/html/car_images/inventory/16128/16128_03.jpg
/html/car_images/inventory/16128/16128_04.jpg
내 목표는 각 디렉터리에 있는 "Thumbnails" 폴더를 삭제하는 것입니다(예: 이 폴더 삭제: /html/car_images/inventory/16128/thumbnails/ 삭제도 하고/html/car_images/inventory/16115/thumbnail/
위의 find 명령에서 출력의 각 줄을 가져온 다음 "*.jpg”를 “thumbnail”로 변경하고 접두사 “rm -fr”을 추가하면 다음과 같은 결과가 나옵니다.
rm -fr /var/www/html/car_images/inventory/16115/thumbnails/
rm -fr /var/www/html/car_images/inventory/16128/thumbnails/
등...
이 작업을 수행하는 방법에 대한 아이디어가 있습니까? (아마도 find 및 sed를 사용하거나 cut의 -exec 옵션을 사용할 수 있을까요?)
(내 전체 목표를 표현하는 또 다른 방법은 X일보다 "젊은" .jpg 파일이 포함된 폴더의 "thumbnails" 폴더를 삭제하는 것입니다.)
답변1
파일 이름에 개행 문자가 없다고 가정합니다.
find /html/car_images/inventory/ -type f -iname \*.jpg -mtime -4 \
-exec sh -c 'echo "${1%/*}"' _ {} \; | sort -u | \
xargs -d $'\n' -I{} rm -r {}/thumbnails
매개변수 확장,
${1%/*}
발견된 각 항목에서 파일 이름이 없는 부분 추출sort -u
중복 항목이 없도록 항목을 정렬한 다음 고유하게 만듭니다.xargs -I{} rm -r {}/thumbnails
thumbnails
끝에 추가한 다음 결과 디렉터리를 삭제합니다.
답변2
while read dir;
do
rm -r "$dir"/thumbnails;
done < <(while read file; do dirname "$file"; done < <(find /html/car_images/inventory/ -type f -iname \*.jpg -mtime -4) | sort -u)
이는 프로세스 대체 내의 프로세스 대체를 사용하여 수행됩니다.
OP 기준에 따라 파일을 찾고, while 루프에서 각 jpg 파일의 디렉터리 이름을 가져오고, @heemayl에서 영감을 받아 중복 항목을 정렬 및 제거한 다음, while 루프에서 파일을 읽어 썸네일 디렉터리를 제거합니다.