मैं एक नए स्थान पर फ़ाइल की प्रतिलिपि कैसे बना सकता हूं, साथ ही निर्देशिका भी बना सकता हूं


12

मैं cpएक और निर्देशिका के लिए एक फ़ाइल चाहते हैं, लेकिन वह निर्देशिका अभी तक मौजूद नहीं है।

तो मैं करूँगा:

mkdir /new_place
cp the_file /new_place

क्या मैं ऐसा कर सकता हूं?
मैं कुछ इस तरह की कल्पना करता हूं कि cp the_file -m /new_placeअगर "मी" "डीर की है जो अस्तित्व में नहीं है" के लिए खड़ा था

क्या यह 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आपको /अपनी नई निर्देशिका पथ के अंत में जोड़ने की आवश्यकता है ।
mfink

1

desgua का उत्तर उचित और सरल तरीका है, लेकिन क्या होगा अगर आपको एक सुरक्षात्मक तरीके की आवश्यकता है? POSIX ध्वज के cpबिना परिभाषित करता है --parent, इसलिए यह सभी प्रणालियों में काम करने वाला नहीं है।

एक विकल्प इसे पायथन में लिखने का है अगर यह सिस्टम पर स्थापित है:

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

और यह काम करना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.