이름이 짝인 디렉터리에서 파일 찾기

이름이 짝인 디렉터리에서 파일 찾기

가변 크기 및 콘텐츠 테스트 세트의 테스트를 실행 중입니다. 데이터 파일은 자주 추가되고 제거됩니다. 파일 목록을 자동으로 수집하는 방법을 찾고 있습니다.

모든 파일은 다음의 하위 디렉터리에 있습니다 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.AREPLY=$REPLY:rmydir/somedir/somefile
이 답변.

관련 정보