як ви скопіюєте каталог та його вміст у нове місце під новою назвою каталогу?


52

Я новачок у командному рядку Linux і зараз намагаюся впоратися з командою copy.

Чи може хто-небудь скажіть мені, чи можна скопіювати каталог з його підкаталогами та пов'язаними з ними файлами в новий каталог з новою назвою, наприклад, каталог_backup?

Заздалегідь дякую за будь-яку допомогу

Відповіді:


69

Ви використовуєте -r(копіюєте рекурсивно) та вказуєте нове ім'я

cp -r /path/to/directory /path/to/location/new-name

замініть справжніми шляхами ... наприклад, скопіюйте stuffз мого домашнього каталогу в існуючий каталог backupта назвіть новий каталог stuff-backup(якщо цей каталог вже існує, зверніть увагу, що stuffвін буде скопійований у нього, а не перезаписуйте його).

cp -r ~/stuff ~/backup/stuff-backup

~- це ярлик для домашнього каталогу /home/$USERабо /home/zannaв моєму випадку. Ви можете опустити його, якщо поточний робочий каталог є вашим домашнім каталогом - це ви можете побачити з підказки

zanna@monster:~$
              ^--the ~ here is where I am - home!

Ви можете додати -vбагатослівний прапор, щоб зробити cpзвіт про кожну виконану копію ...

$ cp -vr stuff backup/stuff-backup
'stuff/thing1' -> 'backup/stuff-backup/thing1'
'stuff/thing2' -> 'backup/stuff-backup/thing2
...

Вибачте Занну. Я втілю ваші поради на практиці і подивіться, як мені йти. Подобається ідея багатослівного прапора. припустимо, це також працюватиме як звіт, тоді як працює інша команда.
Edmuntu

@Edmuntu вибачте за що? Так, багато команд мають -vабо --verboseпрапор :)
Zanna

вибачте за початкове коротке "спасибі" .... натисніть клавішу повернення помилково.
Edmuntu

10

Вам потрібна команда, яка просто cpозначає "копіювати".

Ви можете використовувати його, наприклад, для одного з цих синтаксисів:

cp SOURCEFILE TARGETFILE
cp SOURCEFILE TARGETDIRECTORY

Перший варіант дозволяє вказати нове ім'я файлу для цільового файлу, тоді як другий варіант створює копію з тим самим іменем у цільовому каталозі. Звичайно, ви повинні замінити замісники великими літерами дійсними спершу.

Однак cpза замовчуванням працює лише на файли, а не на каталоги. Щоб скопіювати повний каталог із усім його вмістом рекурсивно, потрібно додати -rпараметр:

cp -r SOURCEDIRECTORY TARGETDIRECTORY

Ви можете дізнатися більше про cpкоманду, ввівши man cpсвій термінал.


Не використовується в цьому розділі коментарів "Байт командир" ... продовжуйте натискання повернутися, щоб змінити рядок, але розмістити замість цього. Дуже чіткий контур у вашій відповіді. З нетерпінням чекайте сортування цих каталогів тепер, коли мені дали гарну інструкцію щодо правильного використання наявних інструментів. Відмінно.
Edmuntu

@Edmuntu Надалі використовуйте SHIFT + ENTER, коментуючи, щоб перейти по лінії.
TheOdd

@OwenHines Просто те, що коментарі знімають будь-яку смугу рядків та додатковий пробіл, а наявність їх у редакторі нічого не змінює в результаті.
Командир байт

@ByteCommander Ой так, ніколи. Ну, тепер він знає.
TheOdd

6

В якості альтернативи загально корисній команді cp ви можете використовувати rsync, який має додаткову перевагу в реплікації дозволів / часових позначок вихідної структури каталогу:

rsync -av dir/ newdir

-архів -v багатослівний

зверніть увагу на косу рису після джерела реж.


5

Мені легше перейти до каталогу, який я копіюю спочатку. Для цього прикладу перейдіть до каталогу, який усі викликали /boot. Будь-хто може скопіювати та вставити команди нижче в свій термінал.

cd /boot
sudo mkdir /boot_backup
sudo cp -r . /boot_backup
du /boot_backup -h

752K    /boot_backup/extlinux/themes/debian-wheezy
756K    /boot_backup/extlinux/themes
832K    /boot_backup/extlinux
2.5M    /boot_backup/grub/i386-pc
20K     /boot_backup/grub/locale
2.3M    /boot_backup/grub/fonts
7.2M    /boot_backup/grub
565M    /boot_backup

Для cpкоманди поточний каталог ідентифікується так, як .це /bootкаталог, який ми змінили. Цей -rпараметр робить рекурсивним включення всіх підкаталогів.

Щоб забезпечити його роботу, запустіть duсписок усіх підкаталогів та загальних розмірів файлів у новому каталозі /boot_backupв цьому випадку.

Закінчивши цей покроковий опис, використовуйте: sudo rm -r /boot_backupдля видалення нового каталогу та його підкаталогів.


1
Хоча це пояснює, як скопіювати всі файли з вашого поточного dir в інший dir, воно не відповідає повністю на питання ОП щодо того, як скопіювати dir (та його вміст) на інше ім’я dir. Існують короткі команди (наприклад cp -r), які допоможуть створити новий каталог та скопіювати в нього всі файли
BlueCacti

1
Він пояснює, як скопіювати та редагувати вміст, і його вміст - відмінність полягає в тому, що він спочатку змінюється у вихідному каталозі як запобіжна звичка. cp -rяк ви рекомендуєте, вже в третьому командному рядку. Підручник ґрунтується на тому, що кожен має /bootкаталог і може спробувати це на власній машині. Якби я використовував cp -r /home/GroundZero/Documents /home/GroundZero/Documents_backupчитачів, не міг би скопіювати та вставити їх у термінал - вони змінили б, GroundZeroстворивши більше роботи та шанси на помилку. Я сподіваюся, що ви оцінюєте KISS цієї відповіді із вбудованим навчальним посібником.
WinEunuuchs2Unix

1
@GroundZero, зробивши a, cd ~/Documents/SomeObsucreFolder/2016/Nov/щоб встановити поточний каталог як вихідний каталог, змінить підказку Terminal, щоб переконатися, що вона написана правильно, а потім, використовуючи cp -r .як джерело, усуває повторне введення вихідного каталогу. Це просто те, що я вважаю хорошою звичкою. Крім того , як тільки змін в вихідний каталог , це легко зробити ls FIleName1, ls FileName2і т.д. , щоб esnure файлів , які ви хочете зробити резервну копію там без необхідності повторювати ім'я вихідного каталогу для lsкоманди.
WinEunuuchs2Unix

5

Ви можете скористатися командою нижче, щоб скопіювати каталог з одного місця в інший підкаталог.

cp -Rvp /home/edmuntu/data /home/edmuntu/mydata/

Пояснення команди:

  • -R = копіювати каталоги рекурсивно
  • v = поясніть, що робиться
  • p = Це допоможе зберегти ваш дозвіл та право власності за допомогою часових позначок

Дякую @Rakesh Chauhan. "Збережіть свій дозвіл та право власності з відмітками часу" ??? Нічого ... мені потрібно дістатися до цього !!!! Ще один аспект рядкових команд, які слід вивчити. Дякую за відповідь
Edmuntu

4

cpце команда, яка виконує ту функцію, яку ви шукаєте. Він розшифровується як копія. Команда, яка працювала б для вас у цій ситуації, така

cp -R source/ destination/

Це скопіювало б source/папку та всі її підкаталоги в destination/.

Якщо destination/його немає, він буде створений.

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


Дякую @ Owen Hines. Звучить так, це, безумовно, команда для мого завдання. Cheers
Edmuntu

1
@Edmuntu Радий, я можу допомогти, якщо ви знайшли рішення вашої проблеми, чи можете ви позначити відповідь, яка працювала для вас, як правильну, натиснувши галочку під нею? Це допоможе сповістити інших, хто переглядає сторінку вирішеного питання.
TheOdd

1

Як правило, ви хочете зберегти дозволи файлу однаковими під час створення копії, а не нового набору дозволів на створення за замовчуванням. Це означає, що використовується прапор -a для cp.

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