패턴과 일치하는 폴더 내에 디렉터리를 생성하는 쉘 스크립트

패턴과 일치하는 폴더 내에 디렉터리를 생성하는 쉘 스크립트

최근 생각보다 어려운 과제를 맡게 되었습니다.

  1. 패턴과 일치하는 모든 폴더를 찾아야 합니다(어도비 포토샵 CC) /Applications/디렉토리에 있습니다.

  2. 그런 다음 다음과 같은 폴더를 만듭니다.시험, 가장 높은 연도 번호가 일치하는 디렉토리에서 /Applications/Adobe Photoshop CC ????/Dummy-test/Test/.

  3. 그 후 폴더를 이동합니다.PSD/private/tmp/com.example.test/PSD폴더 에서시험 /Applications/Adobe Photoshop CC 2021/Dummy-test/Test/

  4. Test폴더가 더 일찍 생성되었을 수도 있다는 점을 지적하고 싶습니다 .

샘플 폴더 구조는 다음과 같습니다.

Applications
|
|--- Adobe Photoshop CC 2015.5
|--- Adobe Photoshop CC 2019
|--- Adobe Photoshop CC 2021
|--- Adobe Photoshop CC 2014

나는 이것을 시도했다

#!/bin/sh

mkdir -p /Applications/Adobe\ Photoshop\ CC\ */Dummy-test/Test
mv /private/tmp/com.example.test/PSD /Applications/Adobe\ Photoshop\ CC\ */Dummy-test/Test/

#!/bin/sh

INSTALL_DIRS = (/Applications/Adobe\ Photoshop\ СС\ */Dummy-test)
INSTALL_DIR=${INSTALL_DIRS[$((${#INSTALL_DIRS[@]}-1))]}
mkdir -p "$INSTALL_DIR"/"Test"

mv /private/tmp/com.example.test/PSD /Applications/Adobe\ Photoshop\ CC\ */Dummy-test/Test/

분명히 그러한 작업을 수행하려면 해당 주제에 대해 더 많이 알아야 합니다(셸 스크립팅에 대한 권장 도서가 있을 수 있습니까?). 이 스크립트가 필요하므로 경험 많은 도움을 주시면 대단히 감사하겠습니다. 감사해요.

답변1

/Applications/Adobe\ Photoshop\ CC\ *Adobe Photoshop CC원하는 디렉토리를 열거하십시오 . 하지만 /Applications/Adobe\ Photoshop\ CC\ */Dummy-test/Test나열기존의 Test목차. 특정 파일을 생성하는 명령에 와일드카드를 전달하면 작동하지 않습니다. 기존 파일을 열거하기 위한 지침과 새 파일을 생성하기 위한 지침을 분리해야 합니다.

두 번째 시도에서는 등호 주위의 공백을 제거하십시오. 대입문에서는 등호 주위에 공백이 있을 수 없습니다. 다시 말하지만, Dummy-test이미 존재하지 않는 한 INSTALL_DIRS아무것도 나오지 않습니다 .

#!/bin/bash
shopt -s nullglob
photoshop_dirs=(/Applications/Adobe\ Photoshop\ СС\ *)
if ((${#photoshop_dirs[@]} == 0)); then
  echo >&2 "$0: fatal error: Adobe Photoshop CC is not installed."
  exit 1
fi
install_dir=${photoshop_dirs[$((${#photoshop_dirs[@]}-1))]}/Dummy-test/Test
mkdir -p "$install_dir"
mv /private/tmp/com.example.test/PSD "$install_dir/"

설명하다:

  • shopt -s nullglob와일드카드 패턴이 일치하는 항목이 없으면 배열이 비어 있게 됩니다. 기본적으로 와일드카드 패턴이 일치하는 항목이 없으면 변경되지 않으므로 배열에는 변경되지 않은 패턴을 포함하는 요소가 포함됩니다 *.
  • 적합한 디렉터리가 없으면 중지하고 오류 메시지를 표시하는 검사를 추가했습니다.

macOS 및 제어하는 ​​시스템에서만 스크립트를 실행하는 데 관심이 있다면 bash 대신 zsh를 사용하는 것이 좋습니다. Zsh가 더 좋고 오류가 덜 발생합니다. bash의 장점은 Linux에 기본적으로 설치되고 일반적으로 *BSD에도 설치된다는 점입니다. 반면 zsh는 설치하기 쉽지만 일반적으로 기본적으로 설치되지 않습니다. macOS에서 bash는 매우 오래된 버전인 반면, zsh는 기본적으로 설치되어 최신 상태로 유지됩니다.

#!/bin/zsh
setopt null_glob
photoshop_dirs=(/Applications/Adobe\ Photoshop\ СС\ *)
if (($#photoshop_dirs == 0)); then
  echo >&2 "$0: fatal error: Adobe Photoshop CC is not installed."
  exit 1
fi
install_dir=${photoshop_dirs[-1]}/Dummy-test/Test
mkdir -p $install_dir
mv /private/tmp/com.example.test/PSD $install_dir/

관련 정보