ディレクトリがあります~/plugins/
および内部には多くのサブディレクトリがあります。 abc
で始まるサブディレクトリだけの別の場所にバックアップを作成したい場合、1行のコピーコマンドでそれを行うことができますか?私はこのようなものが機能すると仮定します(しかし、機能しません):
cp -R〜/ plugins/abc *〜/ destination /
Rsyncにも同じ構文を使用したいので、可能な場合は1行のコマンドを使用します。
find〜/ plugins/-type d -name "abc *" -exec cp -R {}〜/ destination;
それはcp
コマンドではうまくいきますが、ディレクトリごとにrsyncを1回実行する必要があり、効率的ではないようです:(
あなたがしようとしていることがうまくいかなかった理由はわかりません(しかし、「コピー」コマンドとは何ですか?)が、これは少なくともLinux上で動作します:
cp -r ~/plugins/abc* ~/destination
ここに私がまだ頻繁に使用する古いトリックがあります:
(cd ~/plugins/ && tar cfp - abc/) | (cd ~/destination && tar xfpv -)
p
は属性を保持し、~/destination
はどこでもかまいません。
find
の出力をrsync
とともに使用することができます。
# warning: untested
find ~/plugins/ -type d -name "abc*" -print0 | rsync -av --files-from=- --from0 ~/plugins/ ~/destination
-print0
in find
、および--from0
のrsync
は、スペースを含むファイルを正しく処理することを確認します--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);