Я хочу cp
файл в другой каталог, но этот каталог еще не существует.
Итак, я бы сделал:
mkdir /new_place
cp the_file /new_place
Могу ли я сделать это за один раз?
Я представляю что-то вроде cp the_file -m /new_place
, если «m» означает «сделать dir's, которые не существовать "
Будет ли это шанс использовать scp, rsync или другую утилиту копирования?
С - Родители
, вы можете воссоздать каталоги от источника до места назначения. Например:
cp --parents ~/Downloads/test.txt ~/Desktop/
Создаст подкаталоги ~ / Desktop / home / desgua / Downloads
, а затем скопирует в него test.txt
; и
cp --parents Downloads/test.txt ~/Desktop/
создаст ~ / Desktop / Downloads
.
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
Anda boleh menaip dua arahan dengan mudah dengan menggunakan ;. Contohnya:
mkdir folder; cp file.html folder
dan ia mesti berfungsi.
Вы можете сделать это с помощью следующей команды
# rsync --recursive the_file /path/to/your/dir/that/doesn't/exists/
Примечание. Использование «/» в конце пути:
При использовании «/» в конце исходного кода rsync будет скопируйте содержимое последней папки. Если в конце источника не используется «/», rsync скопирует последнюю папку и ее содержимое.
При использовании «/» в конце места назначения rsync вставит данные в последнюю папку. Если в конце места назначения не используется "/", rsync создаст папку с последним именем папки назначения и вставит данные в эту папку.