如何让cp命令创建任何必要的文件夹以将文件复制到目标[重复]

本文探讨了在Linux环境下使用cp命令复制文件时遇到的问题,即目标目录不存在时如何自动创建。通过尝试不同的命令如find、cpio、ditto及结合使用mkdir和cp,解决了这一难题。此外,文章还比较了rsync与cp的优劣,指出rsync在处理目录层级缺失时更为灵活。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文翻译自:How to have the cp command create any necessary folders for copying a file to a destination [duplicate]

This question already has an answer here: 这个问题在这里已有答案:

When copying a file using cp to a folder that may or may not exist, how do I get cp to create the folder if necessary? 使用cp将文件复制到可能存在或不存在的文件夹时,如何在必要时获取cp来创建文件夹? Here is what I have tried: 这是我尝试过的:

[root@file nutch-0.9]# cp -f urls-resume /nosuchdirectory/hi.txt
cp: cannot create regular file `/nosuchdirectory/hi.txt': No such file or directory

#1楼

参考:https://stackoom.com/question/3yba/如何让cp命令创建任何必要的文件夹以将文件复制到目标-重复


#2楼

也可以使用命令find

find ./ -depth -print | cpio -pvd newdirpathname

#3楼

For those that are on Mac OSX, perhaps the easiest way to work around this is to use ditto (only on the mac, AFAIK, though). 对于那些使用Mac OSX的人来说,解决这个问题的最简单方法可能就是使用ditto (仅限于mac,AFAIK)。 It will create the directory structure that is missing in the destination. 它将创建目标中缺少的目录结构。

For instance, I did this 例如,我这样做了

ditto 6.3.2/6.3.2/macosx/bin/mybinary ~/work/binaries/macosx/6.3.2/

where ~/work did not contain the binaries directory before I ran the command. 在运行命令之前, ~/work没有包含二进制目录。

I thought rsync should work similarly, but it seems it only works for one level of missing directories. 我认为rsync应该工作类似,但它似乎只适用于一个级别的丢失目录。 That is, 那是,

rsync 6.3.3/6.3.3/macosx/bin/mybinary ~/work/binaries/macosx/6.3.3/

worked, because ~/work/binaries/macosx existed but not ~/work/binaries/macosx/6.3.2/ 工作,因为〜/ work / binaries / macosx存在但不是〜/ work / binaries / macosx / 6.3.2 /


#4楼

To expand upon Christian's answer, the only reliable way to do this would be to combine mkdir and cp : 为了扩展Christian的答案,唯一可行的方法是将mkdircp结合起来:

mkdir -p /foo/bar && cp myfile "$_"

As an aside, when you only need to create a single directory in an existing hierarchy, rsync can do it in one operation. 另外,当您只需要在现有层次结构中创建单个目录时, rsync可以在一个操作中执行此操作。 I'm quite a fan of rsync as a much more versatile cp replacement, in fact: 我非常喜欢rsync作为一个更通用的cp替代品,事实上:

rsync -a myfile /foo/bar/ # works if /foo exists but /foo/bar doesn't.  bar is created.

#5楼

cp -Rvn /source/path/* /destination/path/
cp: /destination/path/any.zip: No such file or directory

It will create no existing paths in destination, if path have a source file inside. 如果路径中包含源文件,它将在目标中不创建现有路径。 This dont create empty directories. 这不会创建空目录。

A moment ago i've seen xxxxxxxx: No such file or directory, because i run out of free space. 刚才我见过xxxxxxxx:没有这样的文件或目录,因为我用完了空闲空间。 without error message. 没有错误消息。

with ditto: 与同上:

ditto -V /source/path/* /destination/path
ditto: /destination/path/any.zip: No space left on device

once freed space cp -Rvn /source/path/* /destination/path/ works as expected 一旦释放空间cp -Rvn /source/path/* /destination/path/按预期工作


#6楼

rsync is work! rsync是有效的!

#file:
rsync -aqz _vimrc ~/.vimrc

#directory:
rsync -aqz _vim/ ~/.vim
任务描述 恭喜你已经通过了第一关的实训,现在你掌握了pwd、cd和ls命令的基本使用方法。接下来你应该学会关于文件文件夹的常用操作。 本关你的任务是创建一个文件和一个文件夹且将新创建文件拷贝到新建的文件夹重新命名。 相关知识 为了掌握本关知识,你需要掌握: Linux文件操作之创建文件,删除文件Linux文件夹操作之创建文件夹、删除文件夹文件文件夹拷贝、移动/重命名。 Linux文件操作 Linux系统中最常用的文件操作有创建、删除文件等。 创建文件 linux创建文件的常用命令是touch,命令格式如下: touch filename 有时可能需要创建一个空的文件的情况。在这种情况下,可以使用touch命令来轻松创建一个空文件。 例如:创建一个新的文件testfile可以使用如下命令。 touch testfile 如果想同时创建多个文件也可以使用touch命令完成,具体格式如下: touch file1 file2 ... 只需将不同的文件名用空格分隔即可完成创建多个文件。 删除文件 Linux中常用的删除文件命令是rm,使用格式如下: rm [命令选项] filename 常用命令选项: -f:强制删除文件或目录; -r或-R:递归处理,将指定目录下的所有文件与子目录一处理; -i:删除已有文件或目录之前先询问用户。 例如,删除我们刚刚创建文件testfile可以使用如下命令。 rm -f testfile Linux文件夹操作 Linux中关于文件夹的操作主要包括创建和删除等。 创建文件夹 Linux创建文件夹命令是mkdir,命令格式如下: mkdir [命令选项] dirname 常用命令选项: -p或--parents 若所要建立目录的上层目录目前尚未建立,则会一建立上层目录; 例如:我们新创建一个文件夹testdir可以使用如下命令。 mkdir testdir 因为新创建文件夹是一个空的文件夹,所以使用ls -l显示的结果是空。 删除文件夹 Linux中删除文件夹命令是rmdir或者rm -r,命令格式如下: rmdir [命令选项] dirname 常用命令选项:-p或--parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一删除; 例如:将刚刚新创建文件夹testdir删除可以使用如下命令。 rmdir testdir Linux文件文件夹拷贝 Linux使用cp命令用来将一个或多个源文件或者目录复制到指定的目录中,命令格式如下: cp [命令选项] 源文件 目的文件 常用命令选项: -f:强行复制文件或目录,不论目标文件或目录是否已存在; -i:覆盖既有文件之前先询问用户; -p:保留源文件或目录的属性; -R/r:递归处理,将指定目录下的所有文件与子目录一处理。 例如:新建一个文件newfile和一个文件夹newdir,将newfile复制到newdir目录下。具体命令如下。 touch newfile mkdir newdir cp newfile newdir Linux文件文件夹移动/重命名 Linux使用mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中,命令格式如下: mv [命令选项] 源文件 目标文件 常用命令选项: -f:强行复制文件或目录,不论目标文件或目录是否已存在; -i:覆盖既有文件之前先询问用户; -p:保留源文件或目录的属性; -R/r:递归处理,将指定目录下的所有文件与子目录一处理'。 例如:新建一个文件newfile和一个文件夹newdir,将newfile剪切到newdir目录下,重新命名为newfileCpy。具体命令如下。 touch newfile mkdir newdir mv newfile newdir/newfileCpy 编程要求 根据右侧窗口命令行内的提示,在Begin - End区域内进行代码补充,具体任务如下: 在当前目录下新建一个新的文件(名称为newfile); 在当前目录下新建一个新的文件夹(名称为newdir); 将newfile文件复制一份到newdir目录下命名为newfileCpy。 评测说明 补充完命令行后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。 开始你的任务吧,祝你成功! 你认为自己行就一定行,每天要不断向自己重复
03-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值