Как я могу скопировать файл в новое место, создав каталог

Я хочу cp файл в другой каталог, но этот каталог еще не существует.

Итак, я бы сделал:

mkdir /new_place
cp the_file /new_place

Могу ли я сделать это за один раз?
Я представляю что-то вроде cp the_file -m /new_place, если «m» означает «сделать dir's, которые не существовать "

Будет ли это шанс использовать scp, rsync или другую утилиту копирования?

12
задан 11 October 2017 в 13:31

4 ответа

С - Родители , вы можете воссоздать каталоги от источника до места назначения. Например:

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

Создаст подкаталоги ~ / Desktop / home / desgua / Downloads , а затем скопирует в него test.txt ; и

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

создаст ~ / Desktop / Downloads .

17
ответ дан 11 October 2017 в 13:31

jawapan desgua adalah cara yang betul dan sederhana, tetapi bagaimana jika anda memerlukan cara yang boleh dilindungi? POSIX mendefinisikan cp tanpa - bendera induk , jadi ia tidak akan berfungsi di semua sistem.

Salah satu pilihan adalah menulisnya di Python jika dipasang 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 berikut:

$ ./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
1
ответ дан 11 October 2017 в 13:31

Anda boleh menaip dua arahan dengan mudah dengan menggunakan ;. Contohnya:

mkdir folder; cp file.html folder

dan ia mesti berfungsi.

0
ответ дан 11 October 2017 в 13:31

Вы можете сделать это с помощью следующей команды

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

Примечание. Использование «/» в конце пути:

  • При использовании «/» в конце исходного кода rsync будет скопируйте содержимое последней папки. Если в конце источника не используется «/», rsync скопирует последнюю папку и ее содержимое.

  • При использовании «/» в конце места назначения rsync вставит данные в последнюю папку. Если в конце места назначения не используется "/", rsync создаст папку с последним именем папки назначения и вставит данные в эту папку.

5
ответ дан 11 October 2017 в 13:31

Другие вопросы по тегам:

Похожие вопросы: