Dizini de oluşturarak dosyayı yeni bir konuma nasıl kopyalayabilirim


12

cpBaşka bir dizine dosya göndermek istiyorum ancak bu dizin henüz mevcut değil.

Bu yüzden yapardım:

mkdir /new_place
cp the_file /new_place

Bunu bir arada yapabilir miyim?
Ben cp the_file -m /new_place"m" "var olmayan dir yapmak" için durmuş gibi bir şey hayal

Bu scp, rsync veya başka bir kopyalama yardımcı programı kullanma şansı olur mu?

Yanıtlar:


17

İle --parentsdizinleri kaynaktan hedefe yeniden oluşturabilirsiniz. Örneğin:

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

Alt dizinleri oluşturur ~/Desktop/home/desgua/Downloadsve sonra bu dizine kopyalar test.txt; ve

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

oluşturur ~/Desktop/Downloads.


5

Bunu aşağıdaki komutla yapabilirsiniz

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

Not: Yolun sonunda "/" kullanımı:

  • Kaynağın sonunda "/" kullanıldığında, rsync son klasörün içeriğini kopyalar. Kaynağın sonunda "/" kullanılmadığında, rsync son klasörü ve klasörün içeriğini kopyalar.

  • Hedefin sonunda "/" kullanılırken, rsync verileri son klasörün içine yapıştırır. Hedefin sonunda "/" kullanılmadığında, rsync son hedef klasör adına sahip bir klasör oluşturur ve verileri bu klasörün içine yapıştırır.


İsterseniz yeni dizin yolunuzun sonuna the_filea eklemeniz gerekir /.
mfink

1

desgua'nın cevabı doğru ve basit bir yol, ama ya protable bir yola ihtiyacınız varsa? POSIX tanımlar cpolmadan --parenttüm sistemlerinde işe yaramaz böylece, bayrak.

Bir seçenek sistemde yüklü ise Python'a yazmaktır:

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

Bu şu şekilde çalışır:

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

; Komutunu kullanarak iki komutu kolayca yazabilirsiniz. Örneğin:

mkdir folder; cp file.html folder

ve işe yaramalı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.