Що означає "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'це не означає, що він видаляє цей каталог.
Bishwas Mishra

@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 / username is. Тож ви, мабуть, намагаєтесь скопіювати з іншого місця.

  5. Оболонка відрізняється регістром, тому ~ / завантаження та ~ / завантаження - це дві різні речі.


2

Коли ви копіюєте каталог, наприклад:

cp dir1 copy_of_dir1

Ви тільки і точно копіюєте dir1себе, а не файли всередині нього, тож наприкінці ви отримаєте нову структуру каталогів, поки структура не існує.

Іншими словами , після того, як він був скопійований буде сказати , що моє утримання є file1, file2і т.д .; Однак ці файли не скопійовано і, отже, не існує в ньому.

Отже, щоб виправити цю проблему, яка може виникнути cpза замовчуванням, не копіюйте каталоги та не пропускайте їх, якщо не вказати -rпараметр, який також копіює всі файли рекурсивно.


1

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


0

Ф команда використовується для копіювання файлів і директорій, а не здійснення каталоги, якщо ви хочете скопіювати вкладеності каталогів , то ви можете додати -r після цього, де -r означає рекурсивний.

Синтаксис, за яким можна дотримуватися (працює як root):

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

або

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

-1

Припустимо, у вас є два каталоги "Тег" та "Тест"

Якщо ви хочете скопіювати каталог "Тег" у каталог "Тест", скористайтеся командою

$ : cp -r Tag Test (case sensitive)

В основному Проблема буде вирішена з вищевказаним кодом, якщо ні, і ви отримаєте нижче повідомлення типу

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

потім додайте кілька файлів у каталог "Тег", а потім скопіюйте їх у "Тест". Насправді у мене була така ж проблема, але вирішена, як те, що я сказав по-друге.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.