디렉토리를 생성하여 파일을 새 위치로 복사하는 방법


12

내가 원하는 cp다른 디렉토리에 파일하지만 디렉토리가 아직 존재하지 않습니다.

그래서 나는 할 것입니다 :

mkdir /new_place
cp the_file /new_place

이걸 하나로 할 수 있습니까?
내가 좋아하는 뭔가 상상 cp the_file -m /new_place"m"가 "존재하지 않는 디렉토리의합니다"를 상징하는 경우를

scp, rsync 또는 다른 복사 유틸리티를 사용할 수 있습니까?

답변:


17

함께 --parents하면 목적지까지의 소스 디렉토리를 다시 만들 수 있습니다. 예를 들면 다음과 같습니다.

cp --parents ~/Downloads/test.txt ~/Desktop/

서브 디렉토리를 작성한 ~/Desktop/home/desgua/Downloads후 복사 test.txt합니다. 과

cp --parents Downloads/test.txt ~/Desktop/

만들 것 ~/Desktop/Downloads입니다.


5

다음 명령 으로이 작업을 수행 할 수 있습니다

# rsync --recursive the_file /path/to/your/dir/that/doesn't/exists/

참고 : 경로 끝에서 "/"사용 :

  • 소스 끝에서 "/"를 사용하면 rsync는 마지막 폴더의 내용을 복사합니다. 소스 끝에서 "/"를 사용하지 않으면 rsync는 마지막 폴더와 ​​폴더의 내용을 복사합니다.

  • 대상 끝에서 "/"를 사용하면 rsync가 마지막 폴더 안에 데이터를 붙여 넣습니다. 대상 끝에서 "/"를 사용하지 않으면 rsync는 마지막 대상 폴더 이름으로 폴더를 만들고 해당 폴더 안에 데이터를 붙여 넣습니다.


원하는 경우 새 디렉토리 경로 끝에 the_file를 추가해야 /합니다.
mfink 2016 년

1

desgua의 대답 은 적절하고 간단한 방법이지만, 가능한 방법이 필요하다면 어떻게해야합니까? POSIX 는 플래그 cp없이 정의 --parent하므로 모든 시스템에서 작동하지는 않습니다.

하나의 옵션은 시스템에 설치된 경우 Python으로 작성하는 것입니다.

#!/usr/bin/env python3
from os import makedirs
from os.path import exists,basename
from shutil import copyfile
from sys import argv

if len(argv) < 3:
   print('Not enough args',file=stderr)
   exit(1)

filename = basename(argv[2])
dirs = argv[2].replace(filename,'')
makedirs(dirs)
copyfile(argv[1],argv[2])

이것은 다음과 같이 작동합니다.

$ ./mkdircp.py /etc/passwd $HOME/foodir/bardir/passwd.copy
$ stat --printf "%F\n" $HOME/foodir/bardir/passwd.copy
regular file
$ head -n 1 $HOME/foodir/bardir/passwd.copy
root:x:0:0:root:/root:/bin/bash

0

;를 사용하여 두 개의 명령을 쉽게 입력 할 수 있습니다. 예를 들어 :

mkdir folder; cp file.html folder

작동해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.