如何将文件复制到新位置,以及如何创建目录


12

我想将cp文件发送到另一个目录,但该目录尚不存在。

所以我会做:

mkdir /new_place
cp the_file /new_place

我可以一人做吗?
我想像是cp the_file -m /new_place如果“ m”代表“使目录不存在”

这将是使用scp,rsync或其他复制实用程序的机会吗?

Answers:


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,则需要/在新目录路径的末尾添加a 。
mfink

1

desgua的答案是正确而简单的方法,但是如果您需要一种可行的方法呢?POSIX 定义cp不带--parent标志,因此它不可能在所有系统上都起作用。

一种选择是如果它已安装在系统上,则用Python编写:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.