특정 파일 형식의 여러 하위 디렉터리 삭제

특정 파일 형식의 여러 하위 디렉터리 삭제

100개의 하위 디렉터리가 있는 상위 폴더가 있는데 그 중 50개에는 파일이 있고 50개에는 파일이 .dlg없습니다..dlg

.dlg이제 파일이 포함된 하위 폴더를 전체적으로 다른 폴더로 이동하고 .dlg파일 없이 해당 하위 폴더를 처리하고 싶습니다 .

답변1

find . -type d -exec sh -c '
    for dir; do
        ls -- "$dir/"*.dlg >/dev/null 2>&1 && \
        echo mv -v -- "$dir" /move/to/tmp/;
    done
' sh {} + 

드라이 러닝 이동 디렉터리 echo에 대한 명령이 제거되었습니다 .mv

답변2

find명령은 이러한 작업에 이상적입니다.

먼저 테스트용으로 몇 가지 파일을 설정하겠습니다.

$ mkdir -p tmp/testing/{1..100}
$ find tmp/testing -mindepth 1 | shuf | head -50 | while read d; do touch "$d"/foo.dlg; done

그러면 100개의 디렉토리가 생성되고 그 중 임의의 50개에는 이라는 이름이 포함됩니다 foo.dlg. 이제 디렉토리를 어딘가로 이동하려고 합니다.

$ mkdir tmp/testing2/
$ find tmp/testing -type f -regex ".*\.dlg" -exec dirname {} + | while read d; do mv "$d" tmp/testing2/; done

find명령은 확장자가 .dlg인 모든 파일을 찾아서 tmp/testing실행합니다. dirnamedirname명령은 파일이나 디렉터리의 긴 목록을 가져와서 인수에 해당하는 디렉터리 목록을 반환합니다.

따라서 이러한 모든 디렉터리 이름을 얻은 후 이동을 수행하는 루프에 이를 전달합니다. 물론, mv -v발생한 일에 대해 더 자세한 피드백을 원할 경우 그렇게 할 수 있습니다.

관련 정보