Zsh: 하나의 명령으로 디렉터리를 만들고 그 안에 파일을 만드는 방법은 무엇입니까?

Zsh: 하나의 명령으로 디렉터리를 만들고 그 안에 파일을 만드는 방법은 무엇입니까?

mkdir -p텍스트 파일 및 중간 디렉터리 와 유사하게 하나의 명령을 사용하여 해당 디렉터리 내에 디렉터리와 파일을 만들 수 있는지 궁금합니다 .

touch설명서를 주의 깊게 읽었 지만 아무것도 발견하지 못했습니다. 유닉스 스택 교환에서도 답을 찾을 수 없습니다.

파일로 새 디렉토리를 시작하는 것은 매우 일상적인 작업이므로 이를 수행할 수 있는 방법이 있습니까(아마도 touch 이외의 다른 명령을 사용하지 않고)?

답변1

installGNU 명령에는 파일을 복사하고 해당 파일을 가리키는 디렉터리를 한 번에 생성하는 coreutils옵션이 제공됩니다(소유권과 권한을 지정할 수도 있음). -D기본적으로 실행 파일을 생성하며 일반적으로 단계적으로 개발 도구로 사용되므로 umask를 지원하지 않습니다 make install.

install -m u=rw,go=r -D /dev/null some/new/file

(생성된 디렉터리 구성 요소의 권한은 항상 입니다 u=rwx,go=rx.)

create또는 언제든지 다음과 같이 Zsh 함수 로 구현할 수 있습니다 .

create() {
  local file ret=0
  for file do
    mkdir -p -- "$file:h" && true >> "$file" || ret=$?
  done
  return "$ret"
}

비록비어 있는일반 파일은 나에게 약간 무의미해 보입니다.

일반적으로 다음을 수행합니다.

mkdir -p some/dir
your-editor some/dir/some-file

일부 파일을 만듭니다(편집기에서 파일(실제 내용 포함)을 저장한 직후).

또는 다음과 같은 콘텐츠를 생성하는 다른 명령:

some-command > some/dir/some-file
wget -o some/dir/some-file https://example.com/whatever
cp source some/dir/some-file
...etc.

답변2

이것이 내가 가진 것입니다.

#!/bin/zsh -

### Create a text file ###

[[ -z $1 ]] && exit 1

file="$1"

mkdir --parents ${file:h}

$EDITOR $file

명령은 ct(텍스트 생성)이라고 하므로 다음과 같이 실행합니다 ct path/to/dir/file.txt.

다른 스레드의 다른 답변과 달리 이는 or 을(를) 불필요하게 호출하지 않으며 dirnameor 의 더 집중적인 구문을 사용하지도 않습니다. 또한 쉘을 변경하지 않으므로 함수일 필요도 없습니다.${file#...}${file%...}

관련 정보