Что означает "каталог cp: пропуск"?

Я дал следующую команду:

sudo cp ~/Transfers/ZendFramework-1.11.4-minimal/library/Zend/* ~/public_html/cmsk.dev/library/

Когда я это делаю, я начинаю получать следующие сообщения:

cp: omitting directory `Tag' 
cp: omitting directory `Test' 
cp: omitting directory `Text' 
cp: omitting directory `TimeSync' 
cp: omitting directory `Tool' 
cp: omitting directory `Translate' 
cp: omitting directory `Uri' 
cp: omitting directory `Validate' 

и так далее...

Почему я получаю эти сообщения?

6 ответов

Решение

По умолчанию, cp копирует только прямые файлы внутри, а не подкаталоги в каталоге. Сообщение cp: omitting directory 'directory' предупреждает, что указанный каталог не копируется.

Для этого укажите -r (или же --recursive) вариант:

sudo cp -r ~/Transfers/ZendFramework-1.11.4-minimal/library/Zend/* ~/public_html/cmsk.dev/library/

Страница руководства (команда: man cp) содержит обзор доступных опций.

Сообщение означает, что cp не скопировал перечисленные каталоги. Это поведение по умолчанию для cp - только файлы копируются нормально, независимо от того, явно ли вы их указали или используете *, Если вы хотите копировать каталоги, используйте -r переключатель, который означает "рекурсивный".

Вот пара вещей, которые нужно проверить:

  1. Не использовать sudo, Вам это не нужно, у вас уже есть права на запись материала в вашем собственном домашнем каталоге.

  2. Вы можете легко просматривать скрытые файлы и каталоги в графическом файловом менеджере, выбрав в меню "Просмотр / Показать скрытые файлы". Или нажав Ctrl - H.

  3. Вам нужно использовать -R вариант в cp Команда для копирования каталога и его содержимого.

  4. / home не ваш домашний каталог. / home / имя пользователя Таким образом, вы, вероятно, пытаетесь скопировать из неправильного места.

  5. Оболочка чувствительна к регистру, поэтому ~/downloads и ~/Downloads - это две разные вещи.

Когда вы копируете каталог, как:

cp dir1 copy_of_dir1

Вы только и точно копируете dir1 сам по себе, а не файлы внутри него, так что в конце вы получите новую структуру каталогов, в то время как структура не существует.

Другими словами, после того, как он будет скопирован, он скажет, что мое содержимое file1, file2, так далее; Однако эти файлы не были скопированы и, следовательно, не существует в нем.

Таким образом, чтобы решить эту проблему, которая может возникнуть cp по умолчанию не копирует каталоги и пропускает их, если вы не укажете -r опция, которая копирует все файлы рекурсивно тоже.

Причина говорит omitting directory это потому что cp и все известные мне утилиты копирования создают список файлов и подкаталогов для копирования перед началом копирования файлов. Когда --recursive опции отсутствуют, подкаталоги выталкиваются из этого списка. Таким образом, пропуск относится к удалению из списка копий, а не с исходного носителя. Я считаю, что это относится к смыслу сообщения.

Команда cp используется для копирования файлов и каталогов, а не вложенных каталогов. Если вы хотите скопировать вложенные каталоги, то после этого вы можете добавить -r, где -r означает рекурсивный.

Синтаксис, который вы можете использовать (работает как root):

cp -r /source/dir/* /destination/ 

или же

cp --recursive /source/dir/* /destination/

Предположим, у вас есть две директории 'Tag' и 'Test'

Если вы хотите скопировать каталог "Tag" в каталог "Test", используйте команду

$ : cp -r Tag Test (case sensitive)

В основном проблема будет решена с помощью вышеуказанного кода, если нет, и вы получите ниже сообщение, как

cp: omitting directory `Tag' 
cp: omitting directory `Test'

затем добавьте несколько файлов в каталог "Tag" и скопируйте их в "Test". На самом деле, у меня та же проблема, но она решена, как я сказал во-вторых.

Другие вопросы по тегам