LINUX.ORG.RU

Скопировать все файлы из каталога /usr/lib в каталог /opt/backup/lib, имена которых не оканчиваются на символы .a, .so и .la


0

1

В общем, нужно скопировать все файлы из каталога /usr/lib, имена которых не оканчиваются на символы .a, .so и .la, в каталог /opt/backup/lib,

Почему не работает такая конструкция? cp -t $(ls -d /usr/lib | egrep "!(/usr/lib/*.a|/usr/lib/*.so|/usr/lib/*.la)") /opt/backup/lib

Пишет

cp: missing file operand Try `cp --help' for more information.

Потому что ls -d /usr/lib выведет просто /usr/lib (из-за ключа -d)

gentoo_root ★★★★★
()
Последнее исправление: gentoo_root (всего исправлений: 1)

Так не пойдёт. Ты можешь обломаться из-за ограничения на длину строки параметров. Используй xargs и (или) find.

no-such-file ★★★★★
()

Получился вот такой монстр:

find /usr/lib/* -maxdepth 1 -not -regex '*\(.a\|.so\|.la\)' -type f | xargs cp /opt/backup/lib

Но, копирование не происходит:

cp: target `/usr/lib/yum-plugins/refresh-packagekit.pyc' is not a directory

Что я делаю не так?

Win32Sector
() автор топика
Ответ на: комментарий от Win32Sector

Что я делаю не так?

xargs cp /opt/backup/lib

Получается, что список файлов идёт после /opt/backup/lib, а cp воспринимает последний параметр как каталог назначения. Работать будет, если написать так:

xargs cp -t /opt/backup/lib
gentoo_root ★★★★★
()

Можно ещё rsync использовать.

Gotf ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.