如何recursion复制在Linux / Unix上以“abc”开头的目录?

我有一个目录~/plugins/里面有很多子目录。 如果我想在abc的子目录的其他地方创build一个备份,我可以使用一行复制命令来做到这一点吗? 我会假设这样的事情会工作(但事实并非如此):

 cp -R〜/ plugins / abc *〜/ destination /

如果可能的话,我宁愿使用单行命令,因为我也想使用rsync相同的语法,如果我必须做一些像

 find〜/ plugins / -type d -name“abc *”-exec cp -R {}〜/ destination;

那么这对cp命令工作正常,但这将意味着我将不得不运行每个目录的rsync一次,这似乎并不高效:

不知道为什么你正在尝试没有工作(但什么是“复制”命令?),但至少在Linux上工作:

 cp -r ~/plugins/abc* ~/destination 

这是一个我仍然经常使用的老技巧:

  (cd ~/plugins/ && tar cfp - abc/) | (cd ~/destination && tar xfpv -) 

p保留属性, ~/destination可以在任何地方。

有可能使用rsync的输出:

 # warning: untested find ~/plugins/ -type d -name "abc*" -print0 | rsync -av --files-from=- --from0 ~/plugins/ ~/destination 
  • -print0中的-print0rsync --from0确保我们正确地处理带有空格的文件
  • --files-from=-声明我们正在读取stdin的文件列表
 #!/usr/bin/env perl # copie un fichier avec l'arbo # # use File::Basename; use File::Copy; my $source = shift; my $dest = shift; if( !defined $source){ print "Manque fichier source"; exit(0); } if( !defined $dest){ print "Manque repertoire dest"; exit(0); } my $dir = dirname($source); my $file = basename($source); my @arbo = split(/\//, $dir); my $direct = $dest; if( !-d $direct ) { mkdir $direct; } foreach my $d(@arbo) { $direct.="/".$d; if( !-d $direct ) { mkdir $direct; } } copy($source,$direct); 

将此代码片段命名为copyfile

TESTED:用法:./copyfile