디렉터리에서 쌍을 이루는 이름을 가진 파일 찾기

디렉터리에서 쌍을 이루는 이름을 가진 파일 찾기

다양한 크기와 콘텐츠 테스트 세트를 사용하여 테스트를 실행하고 있습니다. 데이터 파일은 자주 추가되고 삭제됩니다. 파일 목록을 자동으로 수집하는 방법을 찾고 있습니다.

모든 파일은 의 하위 디렉터리에 있습니다 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.
이 답변.

관련 정보