Errore di CP (uso combinato con ls e grep) - cp: non può stat
Domanda
Quando faccio ls con grep, il risultato è exaxtly quello che mi serve: un elenco di DLL, vedere sotto:
$ 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
...
Ma quando ho cercato di copiare tutti coloro dll a dire la destinazione di ../, ho ottenuto gli errori e nessun file viene copiato:
$ 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
...
Ho usato essere in grado di a questo per il mio precedente costruzione spinta usando Cygwin, ma non so il motivo per cui la società non sta lavorando per costruire spinta 1-47.
apprecaite qualsiasi ingresso.
Soluzione
Verrà visualizzato un elenco di DLL, ma non si sa in quale directory vivono. Il nome della directory è stampato su una riga separata, una volta, e filtrato da grep
.
Non è possibile utilizzare ls -R
per qualcosa di significativo. Il formato di output è troppo script ostile. Usa find
invece. Questo comando
find . -name "*.dll"
stamperà i nomi di percorso completo del DLL (non è necessario l'uso grep
). Questo comando
find . -name "*.dll" -exec cp {} ..
copierà i file ..
invece di stampare i loro nomi.