Quiero encontrar algunos archivos y luego moverlos.
Puedo encontrar el archivo con:
$ find /tmp/ -ctime -1 -name x*
Traté de moverlos a mi ~/playdirectorio con:
$ find /tmp/ -ctime -1 -name x* | xargs mv ~/play/
Pero eso no funcionó. Obviamente mv necesita dos argumentos.
¿No está seguro de si (o cómo) hacer referencia al 'elemento actual' de xargs en el comando mv?

-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/ \;Respuestas:
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 dexargs:Que funciona en un mecanismo similar a
findy{}. También citaría su-nameargumento (porque un archivo que comienzaxen 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:Lo importante a tener en cuenta es que
-L 1significa que solo se procesará una línea de salidafinda la vez. Esto significa que es sintácticamente lo mismo que:(que ejecuta una sola
mvoperación para cada archivo).Incluso usando el
-0argumento GNU xargs y elfind -print0argumento causa exactamente el mismo comportamiento de-I- esto es paraclone()un proceso para cada archivomv:fuente
Con herramientas GNU:
La opción
-t(--target) es específica de GNU.-print0,-r,-0, Mientras que no estándar y originarios de GNU también se encuentran en algunas otras implementaciones, como en algunos BSDs.POSIXY:
Ambos ejecutan tan pocos
mvcomandos como sea necesario y funcionan con los caracteres que puedan contener los nombres de archivo. El GNU One puede tener la ventaja de seguirfindbuscando archivos mientrasmvcomienza a mover el primer lote.Tenga en cuenta que todos los archivos y directorios terminarán en un directorio, tenga cuidado con los conflictos si varios archivos en diferentes directorios tienen el mismo nombre.
fuente
mvuna vez todos los argumentos (o todos-Lo-n, si se proporcionan). De lo contrario, llamarmva cada archivo se volverá viejo (y lento) rápidamente.Quizás este comando es posible ahora y no fue en 2013, pero esto funciona perfectamente para mí:
La
-tclave coloca primero la carpeta de destino, liberando elmvcomando para tener todos los últimos argumentos como solo los archivos que se moverán.fuente
Puede probar con el siguiente comando y probado y funcionó bien
fuente