Hay una opción poco utilizada para cp
:-t destination
-- ver la página man:
find . -iname "*.SomeExt" | xargs cp -t Directory
Puedes usar |
como a continuación:
find . -iname "*.SomeExt" | while read line
do
cp $line DestDir/
done
Respondiendo a sus preguntas:
-
|
se puede utilizar para resolver este problema. Pero como se vio anteriormente, implica una gran cantidad de código. Además,|
creará dos procesos:uno parafind
y otro paracp
. -
En lugar de usar
exec()
dentro defind
resolverá el problema en un solo proceso.
¡Buena pregunta!
- ¿Por qué no puedes simplemente usar | ¿tubo? ¿No es para eso?
Puede canalizar, por supuesto, xargs
se hace para estos casos:
find . -iname "*.SomeExt" | xargs cp Destination_Directory/
- ¿Por qué todos recomiendan el -exec?
El -exec
es bueno porque proporciona más control de lo que está ejecutando exactamente. Siempre que canalice, puede haber problemas con las esquinas:nombres de archivo que contienen espacios o líneas nuevas, etc.
- ¿Cómo sé cuándo usar ese (ejecutivo) sobre tubería | ?
Realmente depende de ti y puede haber muchos casos. Usaría -exec
siempre que la acción a realizar sea sencilla. No soy muy buen amigo de xargs
, tiendo a preferir un enfoque en el que el find
la salida se proporciona a un while
bucle, como:
while IFS= read -r result
do
# do things with "$result"
done < <(find ...)