ファイルを見つけてコピーする


128

次の方法でファイルが宛先フォルダーにコピーされないのはなぜですか?

# find /home/shantanu/processed/ -name '*2011*.xml' -exec cp /home/shantanu/tosend {} \;

cp: omitting directory `/home/shantanu/tosend'
cp: omitting directory `/home/shantanu/tosend'
cp: omitting directory `/home/shantanu/tosend'

回答:


273

見つかったファイルを/ home / shantanu / tosendにコピーする場合は、cpへの引数の順序を逆にします。

find /home/shantanu/processed/ -name '*2011*.xml' -exec cp "{}" /home/shantanu/tosend  \;

注:findコマンドは、一致したファイルのプレースホルダーとして{}を使用します


14
の目的は\;何ですか?
Astrid 2017年

5
@Astridはこれを
shellbye 2017年

find -iname '*.mp3' -mtime -1 -exec cp {} /home/my_path/ \;このコマンドに問題はありますか?機能していません
mrid

2
結果にパスにスペースがある場合は機能しません。これについて何か提案はありますか?
TheJeff

1
Ubuntu 18では、中括弧も一重引用符で囲む必要があります。find -iname '* .mp3' -mtime -1 -exec cp '{}' / home / my_path / \;
p6majo

32

私はこのような問題に直面しました...

実際には、2つの方法でfindコマンド出力をcopyコマンドで処理できます

  1. 場合はfind、ファイル名にスペースが含まれていない場合は、コマンドの出力は、任意のスペース、すなわちが含まれていない、あなたは、下記のコマンドを使用することができます。

    構文: find <Path> <Conditions> | xargs cp -t <copy file path>

    例: find -mtime -1 -type f | xargs cp -t inner/

  2. しかし、ほとんどの場合、実稼働データファイルにはスペースが含まれている可能性があります。したがって、以下のコマンドのほとんどの場合、より安全です。

    構文: find <path> <condition> -exec cp '{}' <copy path> \;

    find -mtime -1 -type f -exec cp '{}' inner/ \;

2番目の例では、最後の部分、つまりセミコロンもfindコマンドの一部と見なされ、Enterボタンを押す前にエスケープする必要があります。そうしないと、次のようなエラーが発生します

find: missing argument to `-exec'

あなたの場合、find fileをにコピーするために、copyコマンド構文は間違っています/home/shantanu/tosend。次のコマンドが機能します。

find /home/shantanu/processed/ -name '*2011*.xml' -exec cp  {} /home/shantanu/tosend \;

3.あなたがGNUを持っている場合はfind/ xargsfind <Path> <Conditions> -print0 | xargs -0 -r cp -t <copy file path>。例:find -mtime -1 -type f -print0 | xargs -r0 cp -t inner/
Toby Speight 2016年

7

cp -t /home/shantanu/tosend引数がソースではなくターゲットディレクトリであることを伝えるには、を使用する必要があります。次に、それをに変更して-exec ... +cpできるだけ多くのファイルを一度にコピーできるようにします。


2
Linuxでのようなので、ターゲットディレクトリを指定する必要がありました: find /home/shantanu/processed/ -name '*2011*.xml' -exec cp --target-directory=/home/shantanu/tosend {} \;
GuruM

3
この回答は、上の回答のように完全なコマンドが提供された場合、改善および短縮される可能性があります。
ブライアン


-2

そのエラーの理由は、cpにも-rオプションが必要なフォルダをコピーしようとしているためです


3
こんにちは、質問はすでに(しばらく前から)回答されているので、これは実際には関連のある回答ではありません。展開して説明したくない場合は、コメント(担当者がいる場合)でもあるはずです。ただのヘッドアップ:)。
W1ll1amvl 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.