次のファイルがコピー先フォルダーにコピーされないのはなぜですか?
# 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'
見つかったファイルを/ home/shantanu/tosendにコピーすることが目的の場合、cpへの引数の順序が逆になります。
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp {} /home/shantanu/tosend \;
注:findコマンドは、一致するファイルのプレースホルダーとして{}を使用します
このような問題に直面しました...
実際には、2つの方法でfind
コマンド出力をcopy
コマンドで処理できます
find
コマンドの出力にスペースが含まれていない場合、つまりファイル名にスペースが含まれていない場合、以下のコマンドを使用できます:
構文:find <Path> <Conditions> | xargs cp -t <copy file path>
例:find -mtime -1 -type f | xargs cp -t inner/
しかし、ほとんどの場合、実稼働データファイルにはスペースが含まれている場合があります。以下のコマンドのほとんどはより安全です:
構文:find <path> <condition> -exec cp '{}' <copy path> \;
例find -mtime -1 -type f -exec cp '{}' inner/ \;
2番目の例では、最後の部分、つまりセミコロンもfind
コマンドの一部と見なされ、Enterボタンを押す前にエスケープする必要があります。そうしないと、次のようなエラーが表示されます
find: missing argument to `-exec'
あなたの場合、コピーコマンドの構文が間違っていますは、検索ファイルを/home/shantanu/tosend
にコピーします。次のコマンドが機能します。
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp {} /home/shantanu/tosend \;
引数がソースではなくターゲットディレクトリであることを伝えるには、cp -t /home/shantanu/tosend
を使用する必要があります。その後、cp
を取得してできるだけ多くのファイルを一度にコピーするために、-exec ... +
に変更できます。