Comment déplacer ou copier des fichiers répertoriés par "trouver" commande unix?

j'ai une liste de certains fichiers que je vois en utilisant la commande ci-dessous, mais comment puis-je copier ces fichiers listés dans un autre dossier, disons ~/test?

find . -mtime 1 -exec du -hc {} +
37
demandé sur the Tin Man 2013-06-28 19:56:56

5 réponses

ajoutant à la réponse D'Eric Jablow, voici une solution possible (cela a fonctionné pour moi-Linux mint 14 / nadia)

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

vous pouvez vous référer à " Comment puis-je utiliser xargs pour copier des fichiers qui ont des espaces et des citations dans leurs noms? " ainsi.

60
répondu Ankur 2017-05-23 11:46:54

en fait, vous pouvez traiter la sortie de la commande find dans une commande de copie de deux façons:

  1. si la sortie de la commande find ne contient pas d'espace, I. e si le nom du fichier ne contient pas d'espace, vous pouvez utiliser:

    Syntax:
        find <Path> <Conditions> | xargs cp -t <copy file path>
    Example:
        find -mtime -1 -type f | xargs cp -t inner/
    
  2. mais nos fichiers de données de production peuvent contenir des espaces, donc la plupart du temps cette commande est efficace:

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

dans le deuxième exemple, la dernière partie, le point-virgule est également considéré comme faisant partie de la commande find , et doit être échappé avant d'appuyer sur entrer . Sinon, vous obtiendrez une erreur du genre:

find: missing argument to `-exec'
26
répondu Thiyagu ATR 2014-12-08 22:13:31
find /PATH/TO/YOUR/FILES -name NAME.EXT -exec cp -rfp {} /DST_DIR \;
12
répondu Laith Al Obaidy 2013-12-18 11:28:47

si vous utilisez GNU find,

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

cela fonctionne aussi bien que la tuyauterie de la sortie dans xargs tout en évitant les pièges de le faire (il gère les espaces encastrés et les nouvelles lignes sans avoir à utiliser find ... -print0 | xargs -0 ... ).

4
répondu kbolino 2016-04-06 18:18:48

déplace les fichiers trouvés vers le haut d'un dir par rapport à leur dir actuel (pas votre dir actuel)

find . -path "*/yourfolder/*" -type f -execdir mv {} .. \;
0
répondu danday74 2016-11-17 12:16:49