我有一个关于" 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
但我想知道是否有更好的解决方案。
谢谢!
答案 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"