git로 마이그레이션하기 전에 CVS 저장소를 정리하고 있습니다. 준비 과정의 일부로 폴더 만 포함 된 모든 폴더를 찾아야 Attic
합니다.
내 unix-fu는 강하지 않지만 여기에 내가 시도한 것이 작동하지 않지만 의도를 전달합니다.
shopt -s globstar
for file in **/*
do
if [ -d "$file" ];then
if [`ls | wc -l` == 1 && `ls Attic | wc -l` == 1]; then
((echo Attic-only folder))
fi
fi
done
두 번째 부분은 비어있는 폴더 (또는 폴더 체인)를 찾는 것입니다.
예를 들어가 /foo/bar/Attic
제거 /foo/bar
되고 이제 둘 다 비어있는 경우 트리의 해당 부분도 죽일 수 있습니다.
배경 : git로 마이그레이션하기 위해 CVS 저장소를 정리하려고합니다. CVS Attic
는 삭제 된 파일을 위한 폴더를 생성 합니다. 지난 10 년 동안 몇 가지 나쁜 일이 발생했습니다. 나는 위험과 함의를 충분히 알고 있습니다. 데이터를 백업했고 사본 작업을하고 있습니다.
와 bash
, GNU find
및 comm
:
comm -12 \
<( find /path/to/CVS/repo -printf '%h\n' \
sort | uniq -u ) \
<( find /path/to/CVS/repo -name Attic -type d -printf '%h\n' | \
sort )
첫 번째 는 저장소에있는 모든 파일, 디렉토리의 s ( )를 find
인쇄 합니다. 그런 다음 정확히 하나의 하위 항목, 파일 또는 디렉토리가있는 디렉토리를 인쇄합니다.basename
-printf '%h\n'
sort | uniq -u
그런 다음 두 번째 는 디렉토리 find
의 basename
s를 인쇄합니다 Attic
. 이 세트와 위 세트의 교차점 (예 :) comm -12
은 정확히 Attic
하위 항목 만있는 디렉토리입니다 .
물론 이것은 심볼릭 링크 및 기타 재미와 같은 것을 기꺼이 무시하고 개행 문자가 포함 된 파일 이름을 무시합니다. 어쨌든 CVS 리포지토리에 있으면 안됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다