Error de CP (uso combinado con LS y GREP) - CP: No se puede STAT
Pregunta
Cuando hago ls con GREP, el resultado es exageradamente lo que necesito: una lista de DLLS, ver a continuación:
$ ls -R | grep "dll$"
boost_chrono-vc90-gd-1_47.dll
boost_chrono-vc90-mt-gd-1_47.dll
boost_chrono-vc90-1_47.dll
boost_chrono-vc90-mt-1_47.dll
boost_date_time-vc90-gd-1_47.dll
boost_date_time-vc90-mt-gd-1_47.dll
boost_date_time-vc90-1_47.dll
boost_date_time-vc90-mt-1_47.dll
boost_filesystem-vc90-gd-1_47.dll
boost_filesystem-vc90-mt-gd-1_47.dll
boost_filesystem-vc90-1_47.dll
...
Pero cuando intenté copiar todos esos DLL a un destino, digamos .../, recibí errores y no se copian archivos:
$ cp `ls -R | grep "dll$"` ../
cp: cannot stat `boost_chrono-vc90-gd-1_47.dll': No such file or directory
cp: cannot stat `boost_chrono-vc90-mt-gd-1_47.dll': No such file or directory
cp: cannot stat `boost_chrono-vc90-1_47.dll': No such file or directory
cp: cannot stat `boost_chrono-vc90-mt-1_47.dll': No such file or directory
cp: cannot stat `boost_date_time-vc90-gd-1_47.dll': No such file or directory
cp: cannot stat `boost_date_time-vc90-mt-gd-1_47.dll': No such file or directory
cp: cannot stat `boost_date_time-vc90-1_47.dll': No such file or directory
cp: cannot stat `boost_date_time-vc90-mt-1_47.dll': No such file or directory
cp: cannot stat `boost_filesystem-vc90-gd-1_47.dll': No such file or directory
cp: cannot stat `boost_filesystem-vc90-mt-gd-1_47.dll': No such file or directory
...
Usé poder esto para mi construcción de Boost anterior usando Cygwin, pero no sé por qué ahora no funciona para Boost Build 1-47.
Aprecio cualquier entrada.
Solución
Ves una lista de DLL, pero no sabes en qué directorios viven. El nombre del directorio se imprime en una línea separada una vez y se filtra por grep
.
No se puede utilizar ls -R
por cualquier cosa significativa. El formato de salida es demasiado inútil. Usar find
en cambio. Este comando
find . -name "*.dll"
Imprimirá los nombres completos de sus DLL (no es necesario usar grep
). Este comando
find . -name "*.dll" -exec cp {} ..
copiará los archivos para ..
en lugar de imprimir sus nombres.