Regardez la réponse de Stéphane pour la meilleure méthode, regardez ma réponse pour des raisons de ne pas utiliser les solutions les plus évidentes (et les raisons pour lesquelles elles ne sont pas les plus efficaces).
Vous pouvez utiliser l' -Ioption de xargs:
find /tmp/ -ctime -1 -name "x*" | xargs -I '{}' mv '{}' ~/play/
Qui fonctionne dans un mécanisme similaire à findet {}. Je citerais également votre -nameargument (car un fichier commençant par xdans le répertoire actuel serait globalisé et passé en argument à rechercher - ce qui ne donnera pas le comportement attendu!).
Cependant, comme l'a souligné Manatwork, comme détaillé dans la xargspage de manuel:
-I replace-str
Replace occurrences of replace-str in the initial-arguments with
names read from standard input. Also, unquoted blanks do not
terminate input items; instead the separator is the newline
character. Implies -x and -L 1.
La chose importante à noter est que cela -L 1signifie qu'une seule ligne de sortie findsera traitée à la fois. Cela signifie que c'est syntaxiquement le même que:
find /tmp/ -ctime -1 -name "x*" -exec mv '{}' ~/play/
(qui exécute une seule mvopération pour chaque fichier).
Même en utilisant l' -0argument GNU xargs et l' find -print0argument provoque exactement le même comportement de -I- il s'agit d' clone()un processus pour chaque fichier mv:
find . -name "x*" -print0 | strace xargs -0 -I '{}' mv '{}' /tmp/other
.
.
read(0, "./foobar1/xorgslsala11\0./foobar1"..., 4096) = 870
mmap(NULL, 135168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbb82fad000
open("/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=26066, ...}) = 0
mmap(NULL, 26066, PROT_READ, MAP_SHARED, 3, 0) = 0x7fbb82fa6000
close(3) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fbb835af9d0) = 661
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 661
--- SIGCHLD (Child exited) @ 0 (0) ---
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fbb835af9d0) = 662
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 662
--- SIGCHLD (Child exited) @ 0 (0) ---
.
.
.
-I:find . | xargs -I'{}' mv '{}' ~/play/, mais comme homme dit que « Implique-xet-L 1. » Donc , pas de gain. Mieux vaut rester simple et utiliserfind . -exec mv '{}' ~/play/ \;