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


408

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

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' 

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

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

Ответы:


536

По умолчанию 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содержит обзор доступных опций.


2
Большое спасибо. Я думал, что * как-то справится с этим рекурсивно. Но нет. : D Еще раз спасибо. :)
MEM

11
@MEM: *расширяется Bash, а не cp. Проверьте это сами, поставив echo перед собой команду. Когда развернуто, оно сопоставляет все с предшествующим ...library/Zend/(файлы и каталоги в нем).
Лекенштейн

Хорошая новость заключается в том, что omitting directory 'directory'это не означает, что он удаляет этот каталог.
Бишвис Мишра

@Lekensteyn Я пытался скопировать содержимое одного пользователя другому. Поэтому я получил разрешение от пользователя chmod a+rx ~/после того, как попытался скопировать с cp /home/2110/* /home/2111/ним, выдает ошибку, в которой говорится, что разрешение отклонено. где я был неправ. извините за комментарий, потому что я не могу задавать повторяющиеся вопросы. Я надеюсь на быстрый ответ :)
Jasinth Premkumar

@jasinthpremkumar Файлы в /home/2110принадлежат пользователю 2110, а файлы в /home/2111принадлежат 2111. Чтобы установить владельца, используйте что-то вроде sudo chown -R 2111 /home/2111.
Лекенстейн

40

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


16

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

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

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

  3. Вам нужно использовать -Rопцию в cpкоманде, чтобы скопировать каталог и его содержимое.

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

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


2

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

cp dir1 copy_of_dir1

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

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

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


1

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


0

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

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

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

или же

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

-1

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

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

$ : cp -r Tag Test (case sensitive)

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.