cd/ln 명령의 "*" 와일드카드 문자 출력 정렬

cd/ln 명령의 "*" 와일드카드 문자 출력 정렬

일부 파일을 특정 디렉터리(이 경우 복제된 저장소에서 호스트 OS(이 경우 macos)의 테마 폴더로 이동)에 심볼릭 링크하는 데 도움이 되는 작은 스크립트를 만들었습니다. 어쨌든 문제는 Blender가 관리할 새 폴더를 생성한다는 것입니다. 각 버전 자체의 기본 설정

3.1
└ Config
└ Scripts
└ Startup

3.2
└ Config
└ Scripts
└ Startup

. 등.

"*" 와일드카드를 사용하여 이를 나타낼 수 있다는 것을 알았지만 ln 명령에 대해 가장 높은 숫자 값을 가진 폴더를 선택하는 방법이 필요합니다.

도움이 된다면 지금까지 제가 생각해낸 명령은 다음과 같습니다.

ln -sf /'path to theme file' '.../'directory with highest numerical value'/.../interface-theme')

답변1

그리고 zsh:

() {
  ln -sf -- /'path to theme file' $argv[-1]/interface-theme
} '.../'*'/...(/n)

여기서 nglob 한정자는 glob을 활성화하고 numericglobsort(다음과 사이 대신 순서 지정 3.10) glob을 다음 유형의 파일로 제한합니다.3.93.13.2/목차(교체는 -/디렉토리에 대한 심볼릭 링크도 고려합니다. *심볼릭 링크 자체를 따릅니다.) 순서가 지정된 디렉터리 목록을 익명 함수에 전달합니다. 여기서 $argv[-1]명령( )의 마지막 인수를 사용합니다 ln.

또는 eglob 한정자를 사용하여 링크 이름을 추가하고 [-1]마지막 glob 확장을 선택합니다.

ln -sf -- /'path to theme file' '.../'*'/...(/n[-1]e[REPLY+=/interface-theme])

bash(GNU 쉘) 4.4 이상 및 GNU 유틸리티를 사용하면 다음을 수행할 수 있습니다.

print0() {
  (( $# == 0 )) || printf '%s\0' "$@"
}
readarray -td '' dirs < <(
  shopt -s nullglob
  print0 '.../'*'/...'/ |
    sort -zrV
) &&
  (( ${#dirs[@]} )) &&
  ln -sf -- /'path to theme file' "${dirs[1]}"interface-theme

-V(일명)은 glob 한정자 와 --version-sort유사한 정렬을 수행합니다 . 's (디렉토리 선택 및 해당 디렉토리에 대한 심볼릭 링크 선택) 와 유사 하지만 가 추가됩니다.zshn*/zsh*(-/)/

또는 zsh사용 가능하다고 가정하면 다음과 같이 할 수 있습니다.

zsh -c '
  ln -sf -- /"path to theme file" ".../"*"/...(/n[-1]e[REPLY+=/interface-theme])'

관련 정보