Ошибка CP (комбинированное использование с ls и grep) - cp: не может быть - PullRequest
2 голосов
/ 25 июля 2011

Когда я выполняю ls с помощью grep, результат как раз то, что мне нужно: список dll, см. Ниже:

$ 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
...

Но когда я попытался скопировать все эти dll в пункт назначения, скажите ../, Я получил ошибки, и ни один файл не скопирован:

$ 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
...

Я использовал возможность сделать это для моей предыдущей буст-сборки с использованием cygwin, но я не знаю, почему сейчас она не работает для буст-сборки 1-47.

Оцените любой ввод.

1 Ответ

3 голосов
/ 25 июля 2011

Вы видите список библиотек, но не знаете, в каких каталогах они живут.Имя каталога печатается в отдельной строке один раз и отфильтровывается по grep.

. Вы не можете использовать ls -R для чего-либо значимого.Формат вывода слишком скриптово-недружественный.Вместо этого используйте find.Эта команда

find . -name "*.dll"

напечатает полные пути ваших библиотек (не нужно использовать grep).Эта команда

find . -name "*.dll" -exec cp {} ..

скопирует файлы в .. вместо печати их имен.

...