[linux] Unix-폴더 및 파일 경로 생성

mkdir디렉토리 touch를 생성하고 파일 을 생성 할 수 있다는 것을 알고 있지만 한 번에 두 작업을 모두 수행 할 수있는 방법은 없습니까?

즉, 폴더 other가 없을 때 아래 작업을 수행하려면 :

cp /my/long/path/here/thing.txt /my/other/path/here/cpedthing.txt

오류:

cp: cannot create regular file `/my/other/path/here/cpedthing.txt': No such file or directory

누구든지 이것에 대한 해결 방법으로 기능을 생각해 냈습니까?



답변

&&두 개의 명령을 하나의 쉘 라인에 결합하는 데 사용하십시오 .

COMMAND1 && COMMAND2
mkdir -p /my/other/path/here/ && touch /my/other/path/here/cpedthing.txt

참고 : 이전에 나는의 사용을 권장 ;두 개의 명령을 구분을하지만 @trysis 지적으로 사용에 아마 더 나은 &&경우 때문에 대부분의 상황에서 COMMAND1실패 COMMAND2하거나 실행되지 않습니다. (그렇지 않으면 예상하지 못한 문제가 발생할 수 있습니다.)


답변

먼저 모든 상위 디렉토리를 만들어야합니다.

FILE=./base/data/sounds/effects/camera_click.ogg

mkdir -p "$(dirname "$FILE")" && touch "$FILE"

창의력을 발휘하고 싶다면 함수를 만들 수 있습니다 .

mktouch() {
    if [ $# -lt 1 ]; then
        echo "Missing argument";
        return 1;
    fi

    for f in "$@"; do
        mkdir -p -- "$(dirname -- "$f")"
        touch -- "$f"
    done
}

그런 다음 다른 명령처럼 사용하십시오.

mktouch ./base/data/sounds/effects/camera_click.ogg ./some/other/file


답변

/ usr / bin / install을 사용하여 수행하십시오.

install -D /my/long/path/here/thing.txt /my/other/path/here/cpedthing.txt

소스 파일이없는 경우 :

install -D <(echo 1) /my/other/path/here/cpedthing.txt


답변

이것이 내가 할 일입니다.

mkdir -p /my/other/path/here && touch $_/cpredthing.txt

여기서는 $_라인에서 실행 한 이전 명령의 마지막 인수를 나타내는 변수입니다.

항상 그렇듯이 출력이 무엇인지 확인하려면 echo다음과 같이 명령 을 사용하여 테스트 할 수 있습니다 .

echo mkdir -p /code/temp/other/path/here && echo touch $_/cpredthing.txt

다음과 같이 출력됩니다.

mkdir -p /code/temp/other/path/here
touch /code/temp/other/path/here/cpredthing.txt

보너스로 중괄호 확장을 사용하여 한 번에 여러 파일을 작성할 수 있습니다. 예를 들면 다음과 같습니다.

mkdir -p /code/temp/other/path/here &&
touch $_/{cpredthing.txt,anotherfile,somescript.sh}

다시 말하지만 다음과 같이 완전히 테스트 할 수 있습니다 echo.

mkdir -p /code/temp/other/path/here
touch /code/temp/other/path/here/cpredthing.txt /code/temp/other/path/here/anotherfile /code/temp/other/path/here/somescript.sh


답변

#!/bin/sh
for f in "$@"; do mkdir -p "$(dirname "$f")"; done
touch "$@"


답변

두 단계로 수행 할 수 있습니다.

mkdir -p /my/other/path/here/
touch /my/other/path/here/cpedthing.txt


답변

if [ ! -d /my/other ]
then
   mkdir /my/other/path/here
   cp /my/long/path/here/thing.txt /my/other/path/here/cpedthing.txt
fi