Linux에서 폴더 계층 구조에 중첩 된 특정 이름의 폴더를 어떻게 제거합니까?
다음 경로는 폴더 아래에 있으며라는 모든 폴더를 제거하고 싶습니다 a
.
1/2/3/a
1/2/3/b
10/20/30/a
10/20/30/b
100/200/300/a
100/200/300/b
부모 폴더에서 어떤 Linux 명령을 사용해야합니까?
Linux에서 폴더 계층 구조에 중첩 된 특정 이름의 폴더를 어떻게 제거합니까?
다음 경로는 폴더 아래에 있으며라는 모든 폴더를 제거하고 싶습니다 a
.
1/2/3/a
1/2/3/b
10/20/30/a
10/20/30/b
100/200/300/a
100/200/300/b
부모 폴더에서 어떤 Linux 명령을 사용해야합니까?
답변:
대상 디렉토리가 비어 있으면 find를 사용하고 디렉토리 만 필터링하고 이름을 기준으로 필터링 한 다음 rmdir을 실행하십시오.
find . -type d -name a -exec rmdir {} \;
당신이 반복적으로 그 내용을 삭제하려면, 교체 -exec rmdir {} \;
에 의해 -delete
또는 -prune -exec rm -rf {} \;
. 다른 답변에는 이러한 버전에 대한 세부 정보가 포함됩니다.
{} \;
시겠습니까?
{}
"일치하는 파일 / 폴더마다"로 읽을 수 있습니다. 즉, 각 "찾은"파일 / 폴더를 대체합니다. 절의 \;
종결 자입니다 -exec
.
-prune
@David Grayson 제안에 따라 답변에 플래그를 추가하십시오 . 이것이 없으면 find
여전히 누락 된 폴더를 방문하려고 시도하고 결국 Docker 빌드에 실패 할 수있는 오류 코드와 함께 종료됩니다.
다음과 같이 이름 "a"에 find를 사용하고 원하는대로 rm을 실행하여 rm을 실행하십시오.
find . -name a -exec rm -rf {} \;
ls를 사용하여 먼저 나열하여 테스트하십시오.
find . -name a -exec ls {} \;
일반 파일이 아닌 디렉토리 만 제거하려면 "-type d"arg를 사용하십시오 (주석에서 제안한대로).
find . -name a -type d -exec rm -rf {} \;
"{}"은 발견 된 각 파일 "a"에 대한 대체입니다. exec 명령은 대체에 의해 각각에 대해 실행됩니다.
1/2/a/3/4
의도하지 않았을 수도 있는 것과 같은 것을 잡을 것이므로, 먼저 테스트 할 것을 권장하는 +1 ...
echo {}
대신 리코 를 먼저 테스트ls {}
node_modules/
.
find . -name a -type d -exec rm -rf {} \;
인쇄되었지만 사용 하고 작동했습니다 find: ‘./subdir/subdir/a’: No such file or directory
.
이것은 또한 작동합니다- "a"라는 폴더와 그 내용을 모두 제거합니다 :
rm -rf `find -type d -name a`
find/rm
.
find . -name a -exec rm -rf {} \;
더 많은 항목을 찾기 위해 해당 디렉토리에 들어 가려고 할 때 find가 충돌하여 다음과 같은 오류를 발생시킵니다 find: '1/2/3/a': No such file or directory
.
illegal option --t
. 또한 검색 할 디렉토리 ( stackoverflow.com/questions/25840713/… ) 를 전달해야했습니다 rm -rf `find . -type d -name a`
.
을 node_modules
사용하여 진행중인 작업의 백업을 수행하기 전에 폴더 를 삭제하려고했습니다 rsync
. 주요 요구 사항은 node_modules
폴더를 중첩 할 수 있어야하므로 -prune
옵션 이 필요하다는 것입니다.
먼저 삭제할 폴더를 시각적으로 확인하기 위해 이것을 실행했습니다.
find -type d -name node_modules -prune
그런 다음 이것을 실행하여 모두 삭제했습니다.
find -type d -name node_modules -prune -exec rm -rf {} \;
피스 타치 덕분에
sh #!/bin/bash echo "Found node_modules: "; find -type d -name node_modules -prune; read -r -p "Do you really want to delete all directories? [yes/no] " input; if [ ! $input != "yes" ]; then find -type d -name node_modules -prune -exec rm -rf {} \;; fi
find ./ -name "FOLDERNAME" | xargs rm -Rf
트릭을해야합니다. 실수로 펌프 경우, 경고 .
또는 /
으로 xargs rm -Rf
전체 컴퓨터하는 운영체제 재설치를 요구, 그것을 다시 얻을 옵션없이 삭제됩니다.
나는 100 개 이상의 파일을 가지고 있었다
log-12
log-123
log-34
....
위의 답변은 저에게 효과가 없었습니다.
그러나 다음 명령이 도움이되었습니다.
find . -name "log-*" -exec rm -rf {} \;
내가 준 -type
으로 .
는 시작 두 파일과 폴더를 삭제 있도록log-
및 rm -rf
삭제 폴더는 재귀 심지어는 파일이 있습니다.
폴더 만 원한다면
find -type d -name "log-*" -exec rm -rf {} \;
파일 만
find -type f -name "log-*" -exec rm -rf {} \;