bash:用cp完全替换文件夹

时间:2014-08-27 13:49:08

标签: bash cp

我有一个关于" cp" -command的问题: 我必须将文件夹复制到目录。对我来说存在两种不同的情况。在第一个场景中,具有相同名称的文件夹不存在。到目前为止这很简单:

ls test/folder1/
file1  file2
ls test/destination/

cp -r -v test/folder1/ test/destination/
»test/folder1/“ -> »test/destination/folder1“
»test/folder1/file1“ -> »test/destination/folder1/file1“
»test/folder1/file2“ -> »test/destination/folder1/file2“

在第二种情况下,存在具有相同名称的文件夹。这些文件的名称与源文件夹中的名称不同。我真正想要的是目标目录中的文件夹将完全被源文件夹替换(如果存在具有相同名称的文件,则应该覆盖它们;如果文件不存在于源目录中,则应删除它们)

ls test/folder1/
file1  file2
ls test/destination/
folder1
ls test/destination/folder1/
file3  file4

cp -r -v test/folder1/ test/destination/
»test/folder1/file1“ -> »test/destination/folder1/file1“
»test/folder1/file2“ -> »test/destination/folder1/file2“


ls test/destination/folder1/
file1  file2  file3  file4

可能有类似

之类的东西
if [ -d destination/$foldername ]
then
rm -r /destination/$foldername
cp-r -v test/$foldername/ test/destination/$foldername
else
cp-r -v test/$foldername/ test/destination/$foldername
fi

但我想知道是否有更好的解决方案。

谢谢!

1 个答案:

答案 0 :(得分:0)

在第二种情况下,您想要使用:

cp -av test/$foldername/* test/destination/$foldername

这会将test/$foldername内容复制到test/destination/$foldername,覆盖test/destination/$foldername中存在的任何同名文件。此外,要保留$foldername中的任何(天堂禁止)空格,您可以引用路径/文件名,但不能引用*

cp -av "test/$foldername/"* "test/destination/$foldername"