bash: 주어진 문자열을 포함하지 않는 디렉토리 삭제

bash: 주어진 문자열을 포함하지 않는 디렉토리 삭제

wav 또는 mp3라는 디렉터리가 포함되지 않은 bash를 사용하여 디렉터리를 어떻게 삭제할 수 있나요? 저는 macOS Sierra를 사용합니다.

find . -type d \! -exec test -e '{}/wav' \; -printwav 디렉토리를 포함하지 않는 디렉토리를 찾습니다. 이 명령에 mp3를 어떻게 포함할 수 있나요? 결과 디렉터리를 어떻게 삭제할 수 있나요?

내 음악 라이브러리는 다음 구조를 따릅니다. /Musik/<Artist>/<format>/<Artist---Album>/<Track_Titel.wav>여기서 형식은 wav 또는 mp3입니다. 오디오 파일은 없지만 커버만 있는 디렉토리가 많이 있습니다. 예를 들어 오디오 파일이 포함되지 않은 디렉토리를 삭제하기 위해 빈 디렉토리를 검색할 수는 없습니다.

답변1

우선 이 작업을 하기 전에,파일을 백업하십시오.

진지하게.


디렉토리를 직접적으로 포함하지 않는 아티스트 디렉토리(및 그 내용)를 재귀적으로 찾아서 제거하려면(또는파일) wav또는 mp3(케이스예민한) 다음을 시도해 보세요.

find /Musik -mindepth 1 -maxdepth 1 -exec test \! -e {}/wav \; -exec test \! -e {}/mp3 \; -print

당신이 가지고 난 후에야출력을 확인했습니다삭제될 것으로 예상되는 디렉터리와 일치합니다.(그리고 백업을 다시 확인했습니다)그런 다음 다음을 실행해야합니까?

find /Musik -mindepth 1 -maxdepth 1 -exec test \! -e {}/wav \; -exec test \! -e {}/mp3 \; -exec rm -rf {} \;

답변2

2개의 테스트에 대해 test를 두 번 실행하고 둘 다 실패하면 다음 작업을 수행합니다.

find . -type d -exec bash -c "test -f \"{}\"/*wav || test -f \"{}\"/*mp3 || test -d \"{}\"/* || rm -rf \"{}\"" \;

관련 정보