파일 시스템에 데이터를 입력하는 동안 일부 파일이 잘못된 디렉토리에 들어갔습니다. 이제 해당 하위 디렉토리의 다른 폴더에 있는 파일을 건드리지 않고 특정 이름을 가진 모든 폴더를 재설정해야 합니다. 모든 디렉토리를 지우고 싶기 때문에같은 이름가능하다고 생각하는데, 안타깝게도 어떻게 해야 할지 모르겠습니다.
나는 다음과 같은 구조를 가지고 있습니다 :
dir
subdir1
folder_I_want_to_empty //all of these folders have the same name
file_that_needs_to_be_deleted.txt
folder_I_do_not_want_to_empty
file_that_has_to_remain.txt
subdir2
folder_I_want_to_empty //all of these folders have the same name
file_that_needs_to_be_deleted.txt
folder_I_do_not_want_to_empty
file_that_has_to_remain.txt
subdir3
folder_I_want_to_empty //all of these folders have the same name
file_that_needs_to_be_deleted.txt
folder_I_do_not_want_to_empty
file_that_has_to_remain.txt
클리어 방법폴더_원함_비어있음폴더를 삭제하거나 폴더 안의 데이터를 삭제하지 않고 명령 프롬프트를 통해 각 디렉터리에폴더_I_do_not_want_to_empty?
답변1
당신은 그것을 사용할 수 있습니다
rm -fr */folder_I_want_to_empty/* */folder_I_want_to_empty/.??*
이 명령은 매우 파괴적이며 메시지를 표시하지 않지만 자비 없이 비대화형으로 삭제됩니다.
삭제되는 내용을 보려면 rm -fr
다음으로 바꾸십시오 ls -ld
.
ls -ld */folder_I_want_to_empty/* */folder_I_want_to_empty/.??*
.
작은 활자체: 위에 사용된 패턴으로 인해 두 문자(첫 번째 문자는 점)만 있는 파일이나 폴더는 삭제될 가능성이 적습니다. 이것이 문제가 되는 경우 댓글로 알려주시면 패턴을 조정하겠습니다.
답변2
나는 이것을 할 수도 있습니다. 내 예에서는 테스트를 위해 /test 디렉터리를 설정했습니다.
find /test -type d -iname folder_I_want_to_empty -print0 | xargs -0 -I % find % -type f -print -delete
먼저 ( ) find
디렉토리를 호출했습니다 . 그런 다음 각 파일에 대해 xargs가 해당 디렉토리에 있는 파일을 찾아 이름을 인쇄한 다음 삭제하도록 했습니다. 아래 하위 디렉토리는 삭제되지 않지만 귀하의 경우에는 삭제가 불가능합니다. -type d
folder_I_want_to_empty
folder_I_want_to_empty
다음은 독자가 재현할 수 있는 dockerfile의 예입니다.
FROM debian
RUN mkdir -p /test
WORKDIR /test
RUN mkdir -p subdir1/folder_I_want_to_empty subdir2/folder_I_want_to_empty subdir1/folder_I_do_not_want_to_empty subdir2/folder_I_do_not_want_to_empty && \
find /test -mindepth 2 -maxdepth 2 -type d -print0 | xargs -0 -I % touch %/test1 %/test2
ENTRYPOINT [ "/bin/sh" ]
CMD [ "-c" , "find /test -type d -iname folder_I_want_to_empty -print0 | xargs -0 -I % find % -type f -print -delete; find /test -type f" ]