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 {} +
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.
en fait, vous pouvez traiter la sortie de la commande find
dans une commande de copie de deux façons:
-
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/
-
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'
find /PATH/TO/YOUR/FILES -name NAME.EXT -exec cp -rfp {} /DST_DIR \;
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 ...
).
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 {} .. \;