내 응용 프로그램 디렉토리에서 모든 .svn 디렉토리를 제거하는 방법
내 응용 프로그램에있는 내보내기 도구의 임무 중 하나는 .svn
응용 프로그램 디렉토리 트리에서 모든 디렉토리 를 정리하는 것 입니다. Linux 셸에서 전체 트리를 통과하고 .svn
파일을 삭제하는 재귀 명령을 찾고 있습니다.
이 스크립트는 SVN과 관련이없는 다른 파일 / 디렉토리 이름에 사용되므로 내보내기를 사용하지 않습니다. 나는 다음과 같은 것을 시도했다 :
find . -name .svn | rm -fr
작동하지 않았다 ...
이 시도:
find . -name .svn -exec rm -rf '{}' \;
그런 명령을 실행하기 전에 종종 이것을 먼저 실행하고 싶습니다.
find . -name .svn -exec ls '{}' \;
작성한 내용은 개행으로 구분 된 파일 이름 (및 경로) 목록을 (으)로 rm
보내지 만 rm은 해당 입력으로 수행 할 작업을 모릅니다. 명령 줄 매개 변수 만 기대합니다.
xargs
일반적으로 줄 바꿈으로 구분 된 입력을 받아 명령 줄에 배치하므로 xargs를 추가하면 작업 한 내용이 만들어집니다.
find . -name .svn | xargs rm -fr
xargs
rm
받아 들일 수있는 한 많은 인수 만 전달할 정도로 지능적 입니다. 따라서 백만 개의 파일이있는 경우 rm
1,000,000 / 65,000 회 실행될 수 있습니다 (쉘이 명령 행 {65k 파일 + 1-rm의 경우 +--fr의 경우 65,002 개의 인수를 승인 할 수있는 경우).
사람들이 적절하게 지적했듯이 다음도 작동합니다.
find . -name .svn -exec rm -rf {} \;
find . -depth -name .svn -exec rm -fr {} \;
find . -type d -name .svn -print0|xargs -0 rm -rf
처음 두 -exec
양식은 모두 rm
삭제되는 각 폴더를 호출 하므로 1,000,000 개의 폴더 rm
가있는 경우 1,000,000 번 호출됩니다. 이것은 확실히 이상적이지 않습니다. 최신 구현을 rm
통해 가능한 많은 인수를 허용 +
한다는 표시로 명령을 완료 할 수 rm
있습니다.
find . -name .svn -exec rm -rf {} +
마지막 find / xargs 버전은 print0을 사용하므로 find \0
는 개행 문자가 아닌 종료 자로 사용 되는 출력을 생성합니다 . POSIX 시스템 \0
은 파일 이름을 제외한 모든 문자를 허용하므로 인수가 올바르게 전달 rm
되거나 응용 프로그램에 전달되도록하는 가장 안전한 방법 입니다.
또한 기본 디렉토리가 아니라 파일을 찾은 디렉토리에서 -execdir
실행 rm
되고 -depth
깊이가 먼저 시작 되는 a 가 있습니다.
파이프, xargs, exec 등이 필요하지 않습니다.
find . -name .svn -delete
편집 : 농담, 분명히 후드 아래에서 -delete
호출 unlinkat()
하므로 파일이 포함 된 디렉토리에서 작동 unlink
하거나 작동 rmdir
하지 않습니다.
.svn-directory를 삭제하기 위해 이미 많은 답변이 제공되었습니다. 그러나 체크 아웃 대신 내보내기를 수행하면 처음부터 이러한 디렉토리를 피할 수 있습니다.
svn export <url>
많이보고 싶지 않다면
find: `./.svn': No such file or directory
경고가 표시되면 -depth
스위치 를 사용하십시오 .
find . -depth -name .svn -exec rm -fr {} \;
당신은 거의 그것을했다. 명령의 출력을 다른 매개 변수로 매개 변수로 전달하려면 xargs를 사용해야합니다. 추가 -print0
하면 스크립트가 공백이있는 경로를 처리 할 수 있습니다.
find . -type d -name .svn -print0|xargs -0 rm -rf
Windows에서는 다음 레지스트리 스크립트를 사용하여 마우스 오른쪽 버튼 클릭 상황에 맞는 메뉴에 "SVN 폴더 삭제"를 추가 할 수 있습니다. 성가신 파일이 들어있는 디렉토리에서 실행하십시오.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]
@="Delete SVN Folders"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command]
@="cmd.exe /c \"TITLE Removing SVN Folders in %1 && COLOR 9A && FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\" \""
find . -name .svn |xargs rm -rf
중요한 문제로 쉘 을 사용하여 .svn 폴더를 삭제 하려는 경우 find 명령이 방금 삭제 된 디렉토리에 들어가서 다음과 같은 오류 메시지를 표시하지 못하게 하려면 -depth 인수가 필요합니다.
"find: ./.svn: No such file or directory"
결과적으로 아래와 같이 find 명령을 사용할 수 있습니다.
cd [dir_to_delete_svn_folders]
find . -depth -name .svn -exec rm -fr {} \;
이 시도:
find . -name .svn -exec rm -v {} \;
developerWorks 에서 find 명령에 대해 자세히 읽으십시오 .
또는 작업 사본을 수정하지 않고 사본을 내보내려면 rsync를 사용할 수 있습니다.
rsync -a --exclude .svn path/to/working/copy path/to/export
'development' 카테고리의 다른 글
TextView 텍스트를 클릭하거나 탭하는 방법 (0) | 2020.05.14 |
---|---|
우분투에서 ANDROID_HOME 경로를 설정하는 방법은 무엇입니까? (0) | 2020.05.14 |
docker registry v2에서 이미지 목록을 얻는 방법 (0) | 2020.05.14 |
아키텍처 arm64에 대한 정의되지 않은 기호 (0) | 2020.05.14 |
린트 : 무시하는 방법 " (0) | 2020.05.14 |