Я читал этот вопрос, но он не имеет ответа, а мой другой.

Linux: попытка рекурсивно найти файлы из списка и скопировать их в другое место

Я пытаюсь найти реальные файлы по символическим ссылкам этих файлов!

$ sudo find /usr/lib64 -iname "libSM.so" -o -iname "libX11.so" -o -iname "libXinerama.so" -o -iname "libXxf86vm.so" -o -iname "libatk-1.0.so" -o -iname "libc.so.6" -o -iname "libcairo.so" -o -iname "libdl.so" -o -iname "libgcc_s.so.1" -o -iname "libgdk-x11-2.0.so.0" -o -iname "libgdk_pixbuf-2.0.so" -o -iname "libglib-2.0.so" -o -iname "libgmodule-2.0.so" -o -iname "libgobject-2.0.so" -o -iname "libgthread-2.0.so" -o -iname "libgtk-x11-2.0.so.0" -o -iname "libjpeg.so" -o -iname "libm.so" -o -iname "libpango-1.0.so" -o -iname "libpangocairo-1.0.so" -o -iname "libpng.so" -o -iname "libpthread.so.0 " -o -iname "librt.so" -o -iname "libstdc++.so.6" -o -iname "libtiff.so.[3,5]" -o -iname "libz.so"

Для этого вопроса я пробовал такой короткий пример:

$ sudo find -L /usr/lib64 -iname "libSM.so" -o -iname "libz.so" 
     -o -iname "libtiff.so.[3,5]" -exec cp {} /usr/copy \;

Папка пустая.

$ ls -al /usr/copy/
total 0
drwxr-xr-x.  2 root root   6 Feb 15 22:39 .
drwxr-xr-x. 14 root root 167 Feb 15 21:33 ..

Файлы для копирования

$ sudo find /usr/lib64 -iname "libSM.so" -o -iname "libz.so" -o -iname "libtiff.so.[3,5]"
/usr/lib64/libz.so
/usr/lib64/libSM.so
/usr/lib64/libtiff.so.5
/usr/lib64/libtiff.so.3

Команда!

$ sudo find /usr/lib64 -iname "libSM.so" -o -iname "libz.so" -o -iname "libtiff.so.[3,5]" -exec cp -L {} /usr/copy \;

Результат!

$ ls -al /usr/copy/
total 884
drwxr-xr-x.  2 root root     46 Feb 15 22:39 .
drwxr-xr-x. 14 root root    167 Feb 15 21:33 ..
-rwxr-xr-x.  1 root root 419456 Feb 15 22:39 libtiff.so.3
-rwxr-xr-x.  1 root root 479440 Feb 15 22:39 libtiff.so.5
$ 

Только он выполняет копию последнего найденного файла !!!

Как это сделать?

1 ответ1

2

man find на моем Кубунту состояния:

Обратите внимание, что -a если он указан неявно (например, двумя тестами, появляющимися без явного оператора между ними) или явно имеет более высокий приоритет, чем -o . Это значит, что find . -name afile -o -name bfile -print никогда не печатает afile .

Вам нужны (избежавшие) скобки:

sudo find /usr/lib64 \( -iname "libSM.so" -o -iname "libz.so" -o -iname "libtiff.so.[3,5]" \) -exec cp -L {} /usr/copy \;

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .