Mire la respuesta de Stephane para el mejor método, mire mi respuesta por razones para no usar las soluciones más obvias (y las razones por las cuales no son las más eficientes).
Puede usar la -Iopción de xargs:
find /tmp/ -ctime -1 -name "x*" | xargs -I '{}' mv '{}' ~/play/
Que funciona en un mecanismo similar a findy {}. También citaría su -nameargumento (porque un archivo que comienza xen el directorio actual se englobaría y pasaría como un argumento para encontrar, ¡lo que no dará el comportamiento esperado!).
Sin embargo, como lo señala manatwork, como se detalla en la xargspágina man:
-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.
Lo importante a tener en cuenta es que -L 1significa que solo se procesará una línea de salida finda la vez. Esto significa que es sintácticamente lo mismo que:
find /tmp/ -ctime -1 -name "x*" -exec mv '{}' ~/play/
(que ejecuta una sola mvoperación para cada archivo).
Incluso usando el -0argumento GNU xargs y el find -print0argumento causa exactamente el mismo comportamiento de -I- esto es para clone()un proceso para cada archivo 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/pero como dice el hombre, eso "implica-xy-L 1". Así que no hay ganancia. Mejor que sea simple y usarfind . -exec mv '{}' ~/play/ \;