![zsh를 사용하여 파일 이름으로 2개의 폴더를 구별하는 방법은 있지만 파일 이름의 시작 부분만 있습니까?](https://linux55.com/image/183107/zsh%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9C%BC%EB%A1%9C%202%EA%B0%9C%EC%9D%98%20%ED%8F%B4%EB%8D%94%EB%A5%BC%20%EA%B5%AC%EB%B3%84%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EC%9E%88%EC%A7%80%EB%A7%8C%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9D%98%20%EC%8B%9C%EC%9E%91%20%EB%B6%80%EB%B6%84%EB%A7%8C%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
그래서 비슷한 파일이 많이 들어 있는 폴더 2개가 있고 파일 이름에 버전이 적혀 있으므로 파일 이름의 시작 부분이 동일한지 확인하고 싶습니다(예: "sample-1.12" 및 " 샘플-1.13"은 동일한 것으로 간주되어야 합니다.) 비슷한 이름의 파일이 없는 반대 폴더에서 파일을 찾으면 됩니다.
확인할 파일 이름의 첫 부분은 첫 번째 대시, 밑줄 또는 대괄호로 끝납니다.
답변1
${a:|b}
배열 빼기 연산자를 사용할 수 있습니다 .
dir1=/some/dir
dir2=/some/other/dir
a=($dir1/*[[_-]*(N:t)) # [t]ail of every file with at least one -, [ or _
b=($dir2/*[[_-]*(N:t))
a=(${a%%[[_-]*}) # strip [*, _* or -* suffix
b=(${b%%[[_-]*})
print -r in $dir1 and not in $dir2:
print -rC1 -- ${a:|b}
print -r in $dir2 and not in $dir1:
print -rC1 -- ${b:|a}