这个问题在这里已有答案:
使用 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
我不知道你能用cp做到这一点 .
你可以用mkdir来做..
mkdir -p /var/path/to/your/dir
EDIT 请参阅lhunath的answer以了解cp .
没有这样的选择 . 你可以做的是在复制文件之前运行mkdir -p
我制作了一个非常酷的脚本,您可以使用它来复制不存在的位置的文件
#!/bin/bash if [ ! -d "$2" ]; then mkdir -p "$2" fi cp -R "$1" "$2"
现在只需保存它,赋予它权限并使用它运行它
./cp-improved SOURCE DEST
我把-R选项,但它只是一个草稿,我知道它可以,你会在很多方面改进它 . 希望它能帮到你
为了扩展Christian的答案,唯一可行的方法是将 mkdir 和 cp 结合起来:
mkdir
mkdir -p /foo/bar && cp myfile "$_"
另外,当您只需要在现有层次结构中创建单个目录时, rsync 可以在一个操作中完成 . 事实上,我非常喜欢 rsync 作为一个更加多才多艺的替代品 .
rsync
rsync -a myfile /foo/bar/ # works if /foo exists but /foo/bar doesn't. bar is created.
对于那些使用Mac OSX的人来说,解决这个问题的最简单方法可能就是使用ditto(仅限于mac,AFAIK) . 它将创建目标中缺少的目录结构 .
例如,我这样做了
ditto 6.3.2/6.3.2/macosx/bin/mybinary ~/work/binaries/macosx/6.3.2/
在运行命令之前, ~/work 不包含二进制目录 .
~/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
rsync是有效的!
#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
如果路径中包含源文件,它将在目标中不创建现有路径 . 这不会创建空目录 .
刚才我见过xxxxxxxx:没有这样的文件或目录,因为我用完了空闲空间 . 没有错误消息 .
与同上:
ditto -V /source/path/* /destination/path ditto: /destination/path/any.zip: No space left on device
一旦释放空间 cp -Rvn /source/path/* /destination/path/ 按预期工作
cp -Rvn /source/path/* /destination/path/
也可以使用命令 find :
find
find ./ -depth -print | cpio -pvd newdirpathname
令人惊讶的是,我没有在这个帖子中看到正确的答案,只需使用:
cp -r /foo/bar/baz /tmp
像往常一样,一个简单的RTFM建议就足够了,上面会在/ tmp和子目录foo / bar下复制baz文件(如果它们不存在则会创建它们)
cp --help -R, -r, --recursive copy directories recursively
9 回答
我不知道你能用cp做到这一点 .
你可以用mkdir来做..
EDIT 请参阅lhunath的answer以了解cp .
没有这样的选择 . 你可以做的是在复制文件之前运行mkdir -p
我制作了一个非常酷的脚本,您可以使用它来复制不存在的位置的文件
现在只需保存它,赋予它权限并使用它运行它
我把-R选项,但它只是一个草稿,我知道它可以,你会在很多方面改进它 . 希望它能帮到你
为了扩展Christian的答案,唯一可行的方法是将
mkdir
和cp
结合起来:另外,当您只需要在现有层次结构中创建单个目录时,
rsync
可以在一个操作中完成 . 事实上,我非常喜欢rsync
作为一个更加多才多艺的替代品 .对于那些使用Mac OSX的人来说,解决这个问题的最简单方法可能就是使用ditto(仅限于mac,AFAIK) . 它将创建目标中缺少的目录结构 .
例如,我这样做了
在运行命令之前,
~/work
不包含二进制目录 .我认为rsync应该工作类似,但它似乎只适用于一个级别的丢失目录 . 那是,
工作,因为〜/ work / binaries / macosx存在但不是〜/ work / binaries / macosx / 6.3.2 /
rsync是有效的!
如果路径中包含源文件,它将在目标中不创建现有路径 . 这不会创建空目录 .
刚才我见过xxxxxxxx:没有这样的文件或目录,因为我用完了空闲空间 . 没有错误消息 .
与同上:
一旦释放空间
cp -Rvn /source/path/* /destination/path/
按预期工作也可以使用命令
find
:令人惊讶的是,我没有在这个帖子中看到正确的答案,只需使用:
像往常一样,一个简单的RTFM建议就足够了,上面会在/ tmp和子目录foo / bar下复制baz文件(如果它们不存在则会创建它们)