将文件复制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
lhunath.. 249
为了扩展Christian的答案,唯一可行的方法是结合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`命令以上.它只是创建一个级别的文件夹.实际上我不确定它什么时候有用. (7认同)
`"$ _"`是一个"bash变量" - [LINK FOR MORE INFO](http://www.thegeekstuff.com/2010/05/bash-shell-special-parameters/#comments). (7认同)
另外,对于想知道`mkdir`的`-p`参数的人,它在http://pubs.opengroup.org/onlinepubs/9699919799/utilities/mkdir.html的POSIX标准中有记录,并导致中间路径名组件成为创建(即使你的`mkdir foo/bar/baz`即使`foo`或`bar`还不存在). (6认同)
这个答案是最好的,因为如果您在谷歌搜索之前遇到先前输入的cp命令,您可以轻松地"按住ctrl + a"来查看错误思考的`cp`命令的开头并更正它.谢谢! (4认同)
@PengheGeng:是的,这个rsync命令只能创建一个级别的文件夹,但是rsync可以选择创建所有文件夹,或者只创建一些文件夹.[rsync:如何配置它以在服务器上创建目标目录?](/sf/ask/17360801/) (3认同)
Christian.. 104
我不知道你能用cp做到这一点.
你可以用mkdir来做..
mkdir -p /var/path/to/your/dir
编辑 请参阅lhunath 关于合并cp 的答案.
为了扩展Christian的答案,唯一可行的方法是结合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.
我不知道你能用cp做到这一点.
你可以用mkdir来做..
mkdir -p /var/path/to/your/dir
编辑 请参阅lhunath 关于合并cp 的答案.
对于那些使用Mac OSX的人来说,解决这个问题的最简单方法可能是使用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 /
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选项,但它只是一个草稿,我知道它可以,你会在很多方面改进它.希望它能帮到你
也可以使用命令find
:
find ./ -depth -print | cpio -pvd newdirpathname
rsync是有效的!
#file: rsync -aqz _vimrc ~/.vimrc #directory: rsync -aqz _vim/ ~/.vim