rar 파일이 포함된 현재 작업 디렉터리의 모든 하위 디렉터리를 삭제하려고 합니다.
첫 번째 시도: find -name *.rar -exec rm -r {}/.. ';'
유효한 디렉터리가 아니기 때문에 실패했습니다. 좀 더 합리적인 명령을 사용해 보았지만 dirname {}
의도하지 않은 내용을 거의 삭제한 후 질문을 하기로 했습니다.
Windows 7에서 Cygwin을 사용하고 있습니다.
답변1
zsh 사용:
rm -rf **/*.rar(:h)
접미사 :h
가 적용됩니다역사 확장 수정자 h
("head") 각 일치 항목의 기본 이름을 제거하고 디렉터리 부분만 남깁니다.
이 디렉토리가 실제로 삭제하려는 디렉토리인지 확인하십시오! 예를 들어 먼저 임시 디렉터리로 이동합니다.
mkdir DELETE
mv **/*.rar(:h) DELETE/
# check that you really want to delete everything in DELETE
rm -r DELETE
답변2
find를 사용하여 bash -c
고급 작업을 수행 할 수 있습니다 -exec
. cat과 함께 임시 파일을 사용할 때의 문제점은 xargs
파일에 공백, 개행 또는 탭이 포함되어 있으면 중단된다는 것입니다. 다음이 작동합니다.
find . -type f -name '*.rar' -exec bash -c 'rm -rf "${@%/*}"' -- {} +
+
"$@"와 함께 찾기를 사용하면 rm
를 사용하는 것처럼 한 번 실행 됩니다 xargs
.
답변3
한 쌍의 명령문을 사용하여 이를 수행할 수 있습니다.
먼저 다음 명령을 사용하여 삭제할 디렉터리 목록을 가져옵니다.
find -name *.rar -exec dirname {} ';' > toremove
다음으로 cat toremove
원하는 폴더가 포함되어 있는지 확인하세요. 그런 다음 전달하여 rm -rf
사용 하세요.
sed 's/^/"/g' toremove | sed 's/$/"/g' | xargs rm -r
마지막, rm toremove
.
답변4
다음과 같이 시도해 볼 수 있습니다.
for dir in */; do # iterate all subdirectories
touch $dir"dummy.rar" # create a "rar"-file...
for file in $dir*.rar; do # ...so this won't break on zero such
rm $file # remove the dummy, and all archives
done
done