Làm cách nào tôi có thể sao chép tệp vào một vị trí mới, tạo thư mục


12

Tôi muốn cpmột tập tin vào thư mục khác nhưng thư mục đó chưa tồn tại.

Vì vậy, tôi sẽ làm:

mkdir /new_place
cp the_file /new_place

Tôi có thể làm điều này trong một?
Tôi tưởng tượng một cái gì đó giống như cp the_file -m /new_placenếu "m" là viết tắt của "làm cho dir không tồn tại"

Đây sẽ là cơ hội để sử dụng scp, rsync hoặc tiện ích sao chép khác?

Câu trả lời:


17

Với --parentsbạn có thể tạo lại các thư mục từ nguồn đến đích. Ví dụ:

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

Sẽ tạo các thư mục con ~/Desktop/home/desgua/Downloadsvà sau đó sao chép test.txtvào đó; và

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

sẽ tạo ra ~/Desktop/Downloads.


5

Bạn có thể làm điều này với lệnh sau

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

Lưu ý: Sử dụng "/" ở cuối đường dẫn:

  • Khi sử dụng "/" ở cuối nguồn, rsync sẽ sao chép nội dung của thư mục cuối cùng. Khi không sử dụng "/" ở cuối nguồn, rsync sẽ sao chép thư mục cuối cùng và nội dung của thư mục.

  • Khi sử dụng "/" ở cuối đích, rsync sẽ dán dữ liệu vào thư mục cuối cùng. Khi không sử dụng "/" ở cuối đích, rsync sẽ tạo một thư mục có tên thư mục đích cuối cùng và dán dữ liệu vào trong thư mục đó.


Nếu bạn muốn the_filebạn cần thêm một /vào cuối đường dẫn thư mục mới của bạn.
mfink

1

Câu trả lời của desgua là cách thích hợp và đơn giản, nhưng nếu bạn cần một cách có thể tin được thì sao? POSIX định nghĩa cpkhông có --parentcờ, vì vậy nó sẽ không hoạt động trên tất cả các hệ thống.

Một tùy chọn là viết nó bằng Python nếu nó được cài đặt trên hệ thống:

#!/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])

Điều này hoạt động như vậy:

$ ./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

Bạn có thể dễ dàng gõ hai lệnh bằng cách sử dụng; Ví dụ:

mkdir folder; cp file.html folder

và nó nên hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.