linux cp自动创建目标文件夹,关于linux:如何让cp命令创建用于将文件复制到目标的任何必要文件夹...

本问题已经有最佳答案,请猛点这里访问。

当使用cp将文件复制到可能存在或可能不存在的文件夹时,如果需要,如何让cp创建文件夹?以下是我的尝试:

[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

@Nelaar问题的年龄是次要问题;答案的质量和广度应是决定因素。我也没有一个强烈的偏好,但我认为这不值得努力扭转重复的关系。如果您不这么认为,请提供一个理由(可能在meta.stackoverflow.com上,以获得适当的可见性和流程)。

找了同样的东西,找不到下面我的答案,所以我会贴出我是如何做到这一点的:dirname"/nosuchdirectory/hi.txt" | while read path;do mkdir -p"$path"; done && cp -f urls-resume /nosuchdirectory/hi.txt。

如meta.stackoverflow.com/questions/251938/…

为了进一步说明基督教徒的答案,唯一可靠的方法是将mkdir和cp结合起来:

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

另外,当您只需要在现有的层次结构中创建一个目录时,rsync可以在一个操作中完成。我是rsync的忠实粉丝,事实上,我是一个多才多艺的cp替代品:

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

上面的答案已经提到了,但我想再强调一下(因为没有注意到细节而浪费了几分钟):上面的rsync命令不等于上面的mkdir/cp命令。它只是创建一个单一级别的文件夹。实际上,我不确定什么时候有用。

这个答案是最好的,因为如果你在谷歌搜索之前一直使用你先前输入的cp命令,你可以很容易地用ctrl + a进入你的错误想法的cp命令的开头,并纠正它。谢谢您!

另外,对于任何对mkdir的-p参数感到疑惑的人来说,它被记录在pubs.opengroup.org/onlinepubs/9699919799/utilities/mkdir.htm‌&误8203;l的posix标准中,并导致创建中间路径名组件(即,即使foo或bar不存在也允许您使用mkdir foo/bar/baz)。

"$_"是一个bash variable链接以获取更多信息。

关于bash变量的更多信息:stackoverflow.com/a/5163260/3982562

@是的,这个rsync命令只能创建一级文件夹,但是rsync可以选择全部或部分创建。rsync:如何配置它在服务器上创建目标目录?

真烦人。这应该在cp上执行。

我不知道你能用CP做到这一点。

你可以用mkdir来完成。

mkdir -p /var/path/to/your/dir

编辑请参阅lhunath关于合并CP的回答。

cp(1)没有。mkdir-p/foo/bar&&cp myfile"$uuu"确实是可靠实现这一点的唯一方法。

lhunath的评论是最正确和最完整的答案。

@你不应该把你的评论作为答案提交。

@Artb,作为答案提交。

检查这个答案-stackoverflow.com/a/34608146/2007944

这个anwser不应该在这里。问题是关于cp而不是mkdir的……

您好,@karlmorrison这是一个8年前的问题和答案。我还说这是为了mkdir而不是cp。

@克里斯蒂安,我知道,现在是2017年,这是问题的直接答案,不应该是。我知道你说过,但是像我这样的人实际上在寻找关于cp命令的答案时,会遇到这样的答案,这与cp延长我寻找正确答案的时间无关。这里唯一准确的答案是stackoverflow.com/a/947971/1137669,他说cp不能做到。没有人(包括你自己)说用cp是不可能的。

江户十一〔六〕不是现在就完成了吗?

对于那些在MacOSX上的用户,解决这个问题的最简单方法可能是使用DITTO(不过,只有在Mac、Afaik上)。它将创建目标中缺少的目录结构。

例如,我这样做了

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

其中~/work在我运行命令之前没有包含二进制文件目录。

我认为rsync的工作原理应该类似,但它似乎只适用于一个丢失目录的级别。也就是说,

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

工作,因为~/work/binaries/macosx存在,但不存在~/work/binaries/macosx/6.3.2/

我喜欢这样,但问题是当你在非Mac环境中时会被卡住。最好学习平台不可知论的方法。还要注意,我相信rsync可以使用标记-avr创建dir。

mkdir -p `dirname /nosuchdirectory/hi.txt` && cp -r urls-resume /nosuchdirectory/hi.txt

没有这样的选择。您可以在复制文件之前运行mkdir-p

我做了一个非常酷的脚本,你可以用它在不存在的地方复制文件。

#!/bin/bash

if [ ! -d"$2" ]; then

mkdir -p"$2"

fi

cp -R"$1""$2"

现在只需保存它,授予它权限并使用

./cp-improved SOURCE DEST

我提出-r选项,但它只是一个草案,我知道它可以,你会在很多方面改进它。希望它能帮助你

请引用您的参数扩展。否则,您将遭受分词和路径名扩展带来的错误。把"所有的$foo"放在周围。

如果有人在处理时试图重命名文件,这将导致奇怪的结果:cp-improved /foo/file.jpg /bar/file.jpg.bak。不管是否存在bar,我都会以/bar/file.jpg.bak/file.jpg结束。

还可以使用命令find:

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

RSyc就是工作!

#file:

rsync -aqz _vimrc ~/.vimrc

#directory:

rsync -aqz _vim/ ~/.vim

cp -Rvn /source/path/* /destination/path/

cp: /destination/path/any.zip: No such file or directory

如果路径中有源文件,它将不会在目标中创建现有路径。这不会创建空目录。

刚才我看到了XXXXXXX:没有这样的文件或目录,因为我的可用空间不足。无错误信息。

同上:

ditto -V /source/path/* /destination/path

ditto: /destination/path/any.zip: No space left on device

一旦释放空间,cp -Rvn /source/path/* /destination/path/就会按预期工作。

- 6…没有人想投佩德罗的票?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值