ฉันจะคัดลอกไฟล์ไปยังตำแหน่งใหม่สร้างไดเรกทอรีได้อย่างไร


12

ฉันต้องการcpไฟล์ไปยังไดเรกทอรีอื่น แต่ไดเรกทอรีนั้นยังไม่มีอยู่

ดังนั้นฉันจะทำ:

mkdir /new_place
cp the_file /new_place

ฉันสามารถทำได้ในหนึ่งเดียว?
ฉันจินตนาการว่าcp the_file -m /new_placeถ้า "m" ย่อมาจาก "make dir's ที่ไม่มีอยู่"

นี่เป็นโอกาสที่จะใช้ 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คุณต้องเพิ่ม a /ไปยังจุดสิ้นสุดของพา ธ ไดเร็กทอรีใหม่ของคุณ
mfink

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.