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