在RHEL 5中执行shell脚本时,我遇到了复制命令问题。
执行的命令是
cp -fp /fir1/dir2/*/bin/file1 `find . -name file1 -print`
错误是
cp: Target ./6e0476aec9667638c87da1b17b6ccf46/file1 must be a directory
请你提出一些想法,为什么会失败?
由于 罗伯特。
答案 0 :(得分:5)
当使用两个以上的文件名作为参数调用cp
时,它会将最后一个文件名视为目标目录,并将其他参数中指定的所有文件复制到该目标目录中。所以,例如,
cp file1 file2 dir3
将创建dir3/file1
和dir3/file2
。在您的情况下,模式/fir1/dir2/*/bin/file1
似乎匹配多个文件名,因此cp
正在尝试将find
的结果视为目标目录 - 它不是 - 并且失败。
答案 1 :(得分:3)
您不能将许多文件复制到一个位置,除非该位置是目录。
因此应该使用 cp:cp sourcefile destinationfile
或cp source1 source2 destinationdir
。
答案 2 :(得分:2)
正如其他人所说,您无法使用cp
将多个文件复制到一个文件中。另一方面,如果要将多个文件的内容一起附加到一个目标文件中,可以使用cat
。
例如:
cat file1 file2 file3 > destinationfile
答案 3 :(得分:2)
如果不知道你想要达到的目标,就很难回答。
例如,如果要将目录结构中名为“file1”的所有文件复制到目标位置/ tmp,在那里构建相同的目录结构,则此命令将起作用:
cd /dir1/dir2
find . -name file1 | cpio -pvd /tmp
答案 4 :(得分:1)
您不能将多个多个文件复制到文件中,只能复制到目录,即
cp file1 file2 file2 file4
是不可能的,你需要
cp file1 file2 file2 dir1