我想要将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
它应该可以工作。