.svg
다운로드한 파일이 포함된 폴더를 "압축 해제"하는 명령줄 스크립트를 작성 중입니다 . 필요한 파일을 특정 디렉터리에 복사했으며 이제 모두 삭제해야 합니다..svg
파일이 들어있는 디렉토리나에게 필요하지 않은 다른 형식과 라이센스가 가득하기 때문입니다. 어떻게 해야 하나요?
답변1
GNUly에서는 다음과 같을 수 있습니다.
LC_ALL=C find . -name '*.svg' -type f -printf '%h\0' |
LC_ALL=C sort -zu |
xargs -r0 echo rm -rf
find
모든 디렉토리 이름을 보고 하는 위치.svg
정기적인파일을 삭제하고 sort -zu
중복 항목을 제거한 다음 xargs rm
삭제하세요.
주어진 디렉토리에서 파일을 찾은 후에도 .svg
여전히 주어진 디렉토리의 하위 디렉토리에서 파일을 찾기 때문에 이것은 매우 효율적이지 않습니다..svg
현재 디렉토리에 .svg
파일이 포함되어 있으면 삭제가 거부됩니다(일부 포함 및 확장 쉘의 버그 기능을 해결하기 위한 안전 조치로 rm
).rm -rf .
rm -rf .*
.
..
.*
.
위의 를 교체하면 이 문제를 해결할 수 있습니다 "$PWD"
.
echo
원하는 대로 작동한다고 만족스러우면 제거하세요.
와 함께bosh
껍데기, 내장된 기능을 사용하여 이 작업을 보다 효율적으로 수행할 수 있습니다 find
.
has_svg() {
find "$@" -maxdepth 1 -name '*.svg' -type f -call return 0 \;
return 1
}
find . -type d -call 'has_svg "$1"' {} \; -prune -exec echo rm -rf {} +
답변2
GNU find를 사용하면 find에서 find를 사용하여 먼저 낮은 수준에서 시작하는 디렉터리를 살펴본 다음 디렉터리에 최소한 하나의 .svg 파일이 포함되어 있는지 확인합니다. 우리는 그러한 디렉토리를 삭제합니다.
$ find . -depth ! -name . -type d \
-exec sh -c '
N=$#
for d do
test "x$(find "$d/." -maxdepth 1 -type f -name "*.svg" -print -quit)" != "x" &&
set -- "$@" "$d"
done
shift "$N"; rm -rf ${1+"$@"}
' find-sh {} +