CP -Fehler (kombinierte Verwendung mit LS und GREP) - CP: Kann nicht stat
Frage
Wenn ich LS mit Grep mache, ist das Ergebnis exaxisch das, was ich brauche: eine Liste von DLLs, siehe unten:
$ 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
...
Aber als ich versuchte, all diese DLL in ein Ziel zu kopieren, sagen ich ../, habe ich Fehler und keine Dateien werden kopiert:
$ 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
...
Ich habe dies für meinen vorherigen Boost-Build mit Cygwin verwendet, aber ich weiß nicht, warum es jetzt nicht für Boost Build 1-47 funktioniert.
Wertaiten jeder Eingabe.
Lösung
Sie sehen eine Liste von DLLs, aber Sie wissen nicht, in welchen Verzeichnissen sie leben. Der Verzeichnisname wird einmal in einer separaten Zeile gedruckt und durchfilteriert von grep
.
Sie können nicht verwenden ls -R
für alles, was Sinnvolles. Das Ausgabeformat ist zu skriptunfreundlich. Verwenden find
stattdessen. Dieser Befehl
find . -name "*.dll"
Drucken Sie die vollständigen Pfadnamen Ihrer DLLs (keine Verwendung grep
). Dieser Befehl
find . -name "*.dll" -exec cp {} ..
kopiert die Dateien nach ..
anstatt ihre Namen zu drucken.