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

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

我想要将cp文件移到另一个目录但该目录尚不存在。

所以我会这样做:

mkdir /new_place
cp the_file /new_place

我可以一次性完成吗?
我想象cp the_file -m /new_place如果“m”代表“创建不存在的目录”

这是一个使用 scp、rsync 或其他复制实用程序的机会吗?

答案1

--parents可以重新创建从源到目标的目录。例如:

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

将创建子目录~/Desktop/home/desgua/Downloads然后复制test.txt到其中;并且

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

将创建~/Desktop/Downloads

答案2

您可以使用以下命令执行此操作

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

注意:路径末尾使用“/”:

  • 当 source 结尾使用 "/" 时,rsync 会复制最后一个文件夹的内容。当 source 结尾不使用 "/" 时,rsync 会复制最后一个文件夹以及该文件夹的内容。

  • 当目标末尾使用“/”时,rsync 会将数据粘贴到最后一个文件夹中。当目标末尾未使用“/”时,rsync 会创建一个以最后一个目标文件夹名称命名的文件夹,并将数据粘贴到该文件夹​​中。

答案3

desgua 的回答是正确而简单的方法,但如果您需要一种可移植的方法怎么办?POSIX 定义时cp没有--parent标志,因此它不能在所有系统上起作用。

一种选择是如果系统上安装了 Python 的话,用 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

答案4

您可以使用 ; 轻松输入两个命令。例如:

mkdir folder; cp file.html folder

它应该可以工作。

相关内容