가변 크기 및 콘텐츠 테스트 세트의 테스트를 실행 중입니다. 데이터 파일은 자주 추가되고 제거됩니다. 파일 목록을 자동으로 수집하는 방법을 찾고 있습니다.
모든 파일은 다음의 하위 디렉터리에 있습니다 D
. 텍스트 파일에 전체 디렉터리와 이름을 추가해야 합니다. 그러나 파일 이름은 같지만 확장자가 다른(즉... 파일 이름은 다르지만 구조화된 방식으로) "쌍을 이룬" 파일이 있는 파일만 필요합니다. 따라서 MyFileName.A
및 이 있으면 파일 목록에 추가하고 MyFileName.B
싶습니다 .D/.../MyFileName
.A
파일 없는 파일 은 있지만 파일 없는 파일 .B
은 없습니다 . 에 파일이 있으면 두 파일이 모두 동일한 디렉터리에 있는 것입니다..B
.A
.A
.B
어떤 충고?
답변1
파일 이름에 개행 문자가 포함되어 있지 않으면 다음을 수행할 수 있습니다.
find D -type f \( -name '*.A' -o -name '*.B' \) |
sed 's/\.[^.]*$//' |
sort |
uniq -d >paired_files
.B
이는 파일이 없는 파일 이 있는 보다 일반적인 경우에 작동합니다 .A
.
최신 GNU 도구를 사용하여 파일 이름을 처리하려면 다음을 수행하십시오.
find D -type f \( -name '*.A' -o -name '*.B' \) -print0 |
sed -z 's/\.[^.]*$//' |
sort -z |
uniq -dz |
tr '\0' '\n' >paired_files
답변2
".A 파일 없이는 .B 파일이 없습니다."라는 진술이 참인 경우 .B 파일 목록을 가져오고 확장자를 제거하십시오.
find $directory-to-search -name "*.B" | sed -r -e "s~(.*)\.B~\1~g"
답변3
와 함께 zsh
:
print -rl mydir/**/*.A(.e_'REPLY=$REPLY:r; [[ -f $REPLY.B ]]'_)
:r
확장 프로그램을 제거하므로 실행 후의 $REPLY
내용 이 ; 나머지는 비슷하다mydir/somedir/somefile.A
REPLY=$REPLY:r
mydir/somedir/somefile
이 답변.