Bagaimana saya bisa menyalin file ke lokasi baru, membuat direktori juga

12

Saya ingin cpfile ke direktori lain tetapi direktori itu belum ada.

Jadi saya akan melakukan:

mkdir /new_place
cp the_file /new_place

Bisakah saya melakukan ini dalam satu?
Saya membayangkan sesuatu seperti cp the_file -m /new_placejika "m" berarti "membuat dir's yang tidak ada"

Apakah ini kesempatan untuk menggunakan scp, rsync atau utilitas penyalinan lainnya?

Michael Durrant
sumber

Jawaban:

17

Dengan --parentsAnda dapat membuat ulang direktori dari sumber ke tujuan. Sebagai contoh:

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

Akan membuat subdirektori ~/Desktop/home/desgua/Downloadsdan kemudian menyalinnya test.txt; dan

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

akan membuat ~/Desktop/Downloads.

desgua
sumber
5

Anda dapat melakukan ini dengan perintah berikut

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

Catatan: Penggunaan "/" di ujung jalan:

  • Saat menggunakan "/" di akhir sumber, rsync akan menyalin konten folder terakhir. Ketika tidak menggunakan "/" di akhir sumber, rsync akan menyalin folder terakhir dan konten folder.

  • Saat menggunakan "/" di akhir tujuan, rsync akan menempelkan data di dalam folder terakhir. Ketika tidak menggunakan "/" di akhir tujuan, rsync akan membuat folder dengan nama folder tujuan terakhir dan menempelkan data di dalam folder itu.

OrangeTux
sumber
Jika mau, the_fileAnda perlu menambahkan a /ke akhir jalur direktori baru Anda.
mfink
1

Jawaban desgua adalah cara yang tepat dan sederhana, tetapi bagaimana jika Anda membutuhkan cara yang protable? POSIX mendefinisikan cptanpa --parentflag, jadi itu tidak akan bekerja di semua sistem.

Salah satu opsi adalah menulisnya dengan Python jika diinstal pada sistem:

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

Ini berfungsi seperti itu:

$ ./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
Sergiy Kolodyazhnyy
sumber
0

Anda dapat dengan mudah mengetik dua perintah dengan menggunakan; Contohnya:

mkdir folder; cp file.html folder

dan itu harus bekerja.

Galja Moehn
sumber