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
제가 unix 포럼에서 보고 테스트한 것처럼 이것은 문제를 해결합니다.
ptouch() {
for p in "$@"; do
_dir="$(dirname -- "$p")"
[ -d "$_dir" ] || mkdir -p -- "$_dir"
touch -- "$p"
done
}
if [ ! -d /my/other ]
then
mkdir /my/other/path/here
cp /my/long/path/here/thing.txt /my/other/path/here/cpedthing.txt
fi
의 필요성이 없는.if then
문...당신은 그것을 한 줄로 할 수 있습니다 usign.;
mkdir -p /my/other/path/here;cp /my/long/path/here/thing.txt /my/other/path/here/cpedthing.txt
아니면 두 줄로 --
mkdir -p /my/other/path/here
cp /my/long/path/here/thing.txt /my/other/path/here/cpedthing.txt
그-p
디렉터리가 이미 존재하는 경우 오류 반환을 방지합니다(이것이 제가 여기에 온 목적입니다:)).
동일한 디렉토리 계층을 다시 작성하려는 특별한 경우(비정상적인 경우는 아님),cp --parents
유용할 수 있습니다.
예를 들어, 만약/my/long
에는 원본 파일이 포함되어 있습니다.my/other
이미 존재하는 경우 다음 작업을 수행할 수 있습니다.
cd /my/long
cp --parents path/here/thing.txt /my/other
하나의 매개 변수 스니펫으로 단순하게 하려면:
rm -rf /abs/path/to/file; #prevent cases when old file was a folder
mkdir -p /abs/path/to/file; #make it fist as a dir
rm -rf /abs/path/to/file; #remove the leaf of the dir preserving parents
touch /abs/path/to/file; #create the actual file
언급URL : https://stackoverflow.com/questions/9452935/unix-create-path-of-folders-and-file
'programing' 카테고리의 다른 글
git 저장소에서 패치 또는 diff 파일을 생성하여 다른 git 저장소에 적용 (0) | 2023.06.03 |
---|---|
해시의 값을 기준으로 해시 배열을 정렬하려면 어떻게 해야 합니까? (0) | 2023.06.03 |
루비 버전 2.0.0을 Mac OS X v10.10(요세미티)의 최신 버전으로 업데이트하려면 어떻게 해야 합니까? (0) | 2023.06.03 |
Android 버튼을 비활성화하는 방법은 무엇입니까? (0) | 2023.06.03 |
Rspec의 should_raise를 예외적으로 사용하는 방법은 무엇입니까? (0) | 2023.06.03 |