web-dev-qa-db-ja.com

UNIXの「find」コマンドでリストされたファイルを移動またはコピーする方法は?

以下のコマンドを使用して表示される特定のファイルのリストがありますが、リストされたファイルを別のフォルダー、たとえば〜/ testにコピーするにはどうすればよいですか?

find . -mtime 1 -exec du -hc {} +
39
L P

Eric Jablowの答えに加えて、ここに可能な解決策があります(私にとってはうまくいきました-linux mint 14/nadia)

find /path/to/search/ -type f -name "glob-to-find-files" | xargs cp -t /target/path/

xargsを使用して、名前にスペースと引用符が含まれるファイルをコピーするにはどうすればよいですか? 」も参照できます。

65
Ankur

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

  1. findコマンドの出力にスペースが含まれていない場合、つまりファイル名にスペースが含まれていない場合は、次を使用できます。

    Syntax:
        find <Path> <Conditions> | xargs cp -t <copy file path>
    Example:
        find -mtime -1 -type f | xargs cp -t inner/
    
  2. ただし、実稼働データファイルにはスペースが含まれている可能性があるため、ほとんどの場合、このコマンドは効果的です。

    Syntax:
       find <path> <condition> -exec cp '{}' <copy path> \;
    
    Example 
       find -mtime -1 -type f -exec cp '{}' inner/ \;
    

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

find: missing argument to `-exec'
30
Thiyagu ATR
find /PATH/TO/YOUR/FILES -name NAME.EXT -exec cp -rfp {} /DST_DIR \;
13

GNU findを使用している場合、

find . -mtime 1 -exec cp -t ~/test/ {} +

これは、出力をxargsにパイプするのと同様に機能しますが、そうすることの落とし穴を回避します(埋め込みスペースと改行をfind ... -print0 | xargs -0 ...を使用せずに処理します)。

4
kbolino

見つかったファイルを、現在のディレクトリ(現在のディレクトリではない)に対して1つ上のディレクトリに移動します。

find . -path "*/yourfolder/*" -type f -execdir mv {} .. \;
0
danday74