Різниця між cp -r і cp -a


174

Я шукаю різницю між cp -rі cp -a. Що означає "рекурсивний" з точки зору копіювання файлів з папки?


62
деякі люди шукають кращого пояснення на сторінках, оскільки не завжди зрозуміло, що означав опис. Мені довелося копати багато разів і тестувати / експериментувати, щоб з’ясувати, що насправді відбувається з певною командою. Сторінка людини grep може збентежити мене в будь-який день.
Джо

2
Я можу зрозуміти ваше розчарування, але, мабуть, найкращий спосіб навчитися - це протестувати та експериментувати.
трипледи

37
АБО вчись, задаючи тут питання, отримуючи відповідь таким чином, як ти розумієш, а потім краще розумієш, що і як перевірити та експериментувати. Будь ласка, майте на увазі, що робота для вас дуже часто не працює для мене і т. Д. Тощо.
Буде Ланні

Відповіді:


198

Рекурсивний означає, що cpкопіюється вміст каталогів, а якщо в каталозі є підкаталоги, вони також копіюються (рекурсивно). Без -Rцього cpкоманда пропускає каталоги. -rзбігається з -RLinux, він відрізняється в деяких крайових випадках у деяких інших варіантах unix.

За замовчуванням cpстворює новий файл, який має той самий вміст, що і старий файл, і ті ж дозволи, але обмежені umask ; копія датується моментом копіювання та належить користувачеві, який виконує копію. За допомогою -pпараметра копія має той самий час модифікації, той же час доступу та ті ж дозволи, що й оригінал. Він також має того самого власника та групу, що й оригінал, якщо користувач, який робить копію, має дозвіл на створення таких файлів.

-aОпція означає , -Rі -p, плюс кілька інших варіантів збереження. Він намагається зробити копію, максимально наближену до оригіналу: те саме дерево каталогів, ті ж типи файлів, той самий вміст, ті ж метадані (часи, дозволи, розширені атрибути тощо).


35
В основному, якщо ви не хочете чогось особливого, то вам ніколи не потрібно, -rтому що -a(для aріші) це завжди найбезпечніше і, ймовірно, те, що ви очікували, що це станеться.
АМС

2
@ams Так, це хороший підсумок. Єдина поширена причина використання -r- це те, що ви використовуєте інший варіант Unix, окрім Linux, якого немає -a, і зазвичай ви використовуєте cp -rp. Або rsync -a.
Жил

іноді дозволи дозволять -r, але не -a
DrCord

Не -r, не -R не працює в Ubuntu 18
Аркадій

16

Параметр -r або -R для "рекурсивного" означає, що він буде копіювати всі файли, включаючи файли всередині папок.

Перерахований варіант -a такий же, як і -dR, що означає, що він буде зберігати посилання, а також копіювати вміст підкаталогів. Що означає збереження посилань, це те, що він не буде переходити посилання, оскільки він рекурсивно копіює.

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