cp: -r not specified; omitting directory

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

kotnaton
Сообщения: 225

cp: -r not specified; omitting directory

Сообщение kotnaton » 28.10.2018 14:03

Непонятка:

Код: Выделить всё

cp /usr/local/bin/{mycd*,j*} $(find list-cd -name mycd -type f | rev | cut -f 2- -d'/'  | rev)/
Непонятно, почему возвращает ошибку:

Код: Выделить всё

cp: -r not specified; omitting directory './list-cd/progs-oldver/prog/prog
бывает же такое ???
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 2169
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14,2

Re: cp: -r not specified; omitting directory

Сообщение Hephaestus » 28.10.2018 14:09

cp по умолчанию не копирует каталоги.
В вашем случае оно так прямо и говорит:
опция -r не задана, каталог ./list-cd/progs-oldver/prog/prog пропускается.

Для копирования каталогов нужна опция -r или -R. В манах (по крайней мере, раньше) предпочтение отдавалось опции -R, опция -r, якобы, иногда вела себя странно. Как сейчас - не знаю.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

kotnaton
Сообщения: 225

Re: cp: -r not specified; omitting directory

Сообщение kotnaton » 28.10.2018 14:15

Но ищу-то я файл, я так и задаю в find - type f, и копировать команда должна файл,в директорию найденную find, а не саму директорию.
Последний раз редактировалось kotnaton 28.10.2018 14:17, всего редактировалось 1 раз.
бывает же такое ???
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 4694
ОС: Gentoo

Re: cp: -r not specified; omitting directory

Сообщение /dev/random » 28.10.2018 14:17

Если, к примеру, в /usr/local/bin/ лежат mycd1 и j2, а команда в $() находит 2 каталога: "list-cd/dir1" и "list-cd/directory with spaces", то вся команда превращается в следующее:

Код: Выделить всё

cp /usr/local/bin/mycd1 /usr/local/bin/j2 list-cd/dir1 list-cd/directory with spaces
А это означает: скопировать в каталог "spaces" следующие файлы (не каталоги, т.к. не указан ключ -r): "/usr/local/bin/mycd1", "/usr/local/bin/j2", "list-cd/dir1", "list-cd/directory" и "with". Это явно не то, что вы хотели сделать, но сказали вы компьютеру сделать именно это.
Спасибо сказали:

kotnaton
Сообщения: 225

Re: cp: -r not specified; omitting directory

Сообщение kotnaton » 28.10.2018 14:23

/dev/random писал:
28.10.2018 14:17
directory with spaces
Вся штука в том, что у меня там нет имён с пробелами, максимум дефис :(
бывает же такое ???
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 4694
ОС: Gentoo

Re: cp: -r not specified; omitting directory

Сообщение /dev/random » 28.10.2018 14:24

kotnaton писал(а):
28.10.2018 14:23
Вся штука в том, что у меня там нет имён с пробелами, максимум дефис
Даже если нет пробелов, проблема с несколькими найденными директориями остаётся.
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 2169
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14,2

Re: cp: -r not specified; omitting directory

Сообщение Hephaestus » 28.10.2018 14:26

kotnaton писал(а):
28.10.2018 14:15
Но ищу-то я файл, я так и задаю в find - type f, и копировать команда должна файл,в директорию найденную find, а не саму директорию.
Стоп. Вы задаете команде find опцию -type f, чтобы она искала файл,
но при этом ожидаете, что cp скопирует файл
kotnaton писал(а):
28.10.2018 14:15
в директорию найденную find
Это как? find не найдёт никаких директорий, поскольку вы ей прямо сказали искать файл.

Вы уж разберитесь, что и куда Вы хотите скопировать.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

kotnaton
Сообщения: 225

Re: cp: -r not specified; omitting directory

Сообщение kotnaton » 28.10.2018 14:39

Hephaestus писал:
28.10.2018 14:26
прямо сказали искать файл.
Да, я ищу полный путь к устаревшей версии файла, извлекаю путь к нему, и хочу заменить в найденном месте новой копией из известного места, собственно строка поиска должна была выглядеть как-то так

Код: Выделить всё

find list-cd -name mycd -type f -exec bash -c "echo $dirname {}" \;
Но я в последнее время предпочитаю не использовать dirname и basename если есть такая возможность

Но /dev/random ответил на вопрос, спасибо.
Последний раз редактировалось kotnaton 28.10.2018 14:55, всего редактировалось 1 раз.
бывает же такое ???
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 2169
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14,2

Re: cp: -r not specified; omitting directory

Сообщение Hephaestus » 28.10.2018 14:54

kotnaton
То есть, Вы хотите найти с помощью find полный путь к некоторому файлу, отрезать имя файла и получить таким образом путь до директории, куда и будет копировать файлы команда cp. Правильно понимаю?
В таком случае, у Вас, вероятно, происходит некорректная постобработка результата команды find.
И вместо пути до директории Вы можете получить что-то другое, например:
- путь до файла вместо директории
- путь до несуществующей директории.
В первом случае cp попытается копировать несколько файлов в один, во втором случае попытается скопировать в несуществующую директорию.

А в Вашем конкретном случае больше похоже на то, что команда cp рассматривает /list-cd/progs-oldver/prog/prog не как каталог назначения, а как файл, который надо скопировать. А произошло это потому, что
/list-cd/progs-oldver/prog/prog не является именем каталога.

То есть объектами копирования являются файлы по маске из /usr/local/bin, а также некий объект /list-cd/progs-oldver/prog/prog (возможно, он и не существует, просто имя такое сформировалось по ошибке).
И всё это вместе она пытается копировать куда-то в третий каталог (уж не знаю, в какой).
А поскольку в пути /list-cd/progs-oldver/prog/prog есть вложенный каталог, она отказывается его копировать без опции -r.
Дайте ей опцию -r, она начнет ругаться, что не задан каталог назначения.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 2169
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14,2

Re: cp: -r not specified; omitting directory

Сообщение Hephaestus » 28.10.2018 14:58

kotnaton писал(а):
28.10.2018 14:39
Теперь даёт ошибку "не является каталогом", хотя если если заменить cp на echo, то выводит правильный dirname без имени файла
Пока я писал ответ, Вы провели эксперимент.
То есть я почти не ошибся.
Что ж, в таком случае проверяйте, возможно полученный dirname не такой уж правильный, как кажется с виду.
Попробуйте на полученный dirname натравить ls и увидите, кто есть кто.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали: