답변:
xargs
모든 마술을한다 :
find . -name test -type d -print0|xargs -0 rm -r --
xargs
stdin에 전달 된 인수와 함께 매개 변수로 전달 된 명령을 실행합니다.
rm -r
디렉토리와 모든 하위를 삭제하는 데 사용 됩니다.
가 --
시작하는 경로 피하기 위해 인수의 끝을 나타낸다 -
인자로 처리되는 것이있다.
-print0
줄 바꿈 대신 문자 find
를 인쇄하도록 지시 합니다 \0
. 그리고 -0
이야기 xargs
만을 치료하기 위해 \0
인수 구분한다.
이것은 rm
많은 디렉토리를 한 번에 호출 rm
하여 각 디렉토리에 대해 별도로 호출하는 오버 헤드를 피합니다 .
대안으로, 선택한find
각 파일 에 대해 명령을 실행할 수도 있습니다 .
find . -name test -type d -exec rm -r {} \;
그리고 전화 때문에 더 나은 성능이 하나, rm
함께 한 번에 여러 디렉토리 :
find . -name test -type d -exec rm -r {} +
( +
끝 부분에 주목하십시오 . 이것은 xargs
솔루션 과 같습니다 .)
xargs
명령은 잘 작동.
find /path/to/dir -name "test" -type d -delete
-name : 전달 된 이름을 찾습니다. -regex
정규식을 기반으로 이름을 제공하는 데 사용할 수 있습니다
-type : 파일 형식을 찾습니다. d
디렉토리 만 찾습니다
-delete : 발견 된 목록을 삭제하는 조치입니다.
또는
find /path/to/dir -name "test" -type d -exec rm -rf {} \;
로 JF 세바스찬 의견에 명시된 :
한 번에 둘 이상의 디렉토리를 전달 하는 +
대신 사용할 수 있습니다 \;
.
+
대신 사용할 수 있습니다 \;
.
이 작업을 수행하는 또 다른 방법은
find . -name test -exec rm -R "{}" \;
찾기에 유용한 링크 : http://www.softpanorama.info/Tools/Find/using_exec_option_and_xargs_in_find.shtml
다른 답변에서 알 수 있듯이 이름이 있는 모든 디렉토리 를 찾아서 test
삭제할 수 있습니다
find -name "test" -type d -delete
Mac에서 교차 호환성과 관련된 몇 가지 문제가 발생하여 다음과 같은 명령을 사용했습니다.
find -path "*/test" -type d -delete
라는 이름의 디렉토리 중 하나가 경우 각각의 경우에, test
그 (것)들에있는 파일이, find
그 불평 것 Directory is not empty
, 그리고 디렉토리를 제거 할 수 없게됩니다.
디렉토리를 포함한 모든 파일 을 삭제 하려는 경우 test
동일한 트릭을 사용하여 test
first 라는 디렉토리 내의 모든 파일을 삭제할 수 있습니다 .
find -path "*/test/*" -delete
패턴 : "*/test/*"
은 디렉토리 안에있는 파일 만 삭제하도록합니다 /test/
. 디렉토리가 비어 있으면 첫 번째 명령을 사용하여 디렉토리를 삭제할 수 있습니다.
find -path "*/test" -type d -delete
예:
$ tree
.
├── mytest
│ └── test
│ └── blah.txt
├── test
│ ├── bar.jpg
│ └── dir
│ └── bar.bak
└── testdir
└── baz.c
5 directories, 4 files
$ find -path "*/test" -type d -delete
$ tree
.
├── mytest
│ └── test
├── test
└── testdir
└── baz.c
4 directories, 1 file
$ find -name "test" -type d -delete
$ tree
.
├── mytest
└── testdir
└── baz.c
2 directories, 1 file
+
입니다. 나는 오래 전에 알고 있었으면 좋겠다는 것을 전혀 몰랐다.