Копіювання файлів в linux

Утиліта копіювання файлів cp

Синтаксис і опції

Загальний синтаксис cp виглядає ось так:

$ Cp опції файл-джерело файл-приймач

$ Cp опції файл-джерело директорія-приймач /

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

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

Приклади копіювання файлів в linux

Тепер, коли ви знаєте основні опції можна розглянути прімери.Напрімер, ми хочемо скопіювати якусь картинку з домашньої папки в підкаталог pictures:

Або можемо явно вказати ім'я нової картинки:

Після виконання цієї команди копіювання

/ Папка буде скопійована в папку

/ Документи. Головне, не забудьте поставити слеш в кінці виразу або використовувати опцію -t. інакше папка

/ Документи перезапишеться.

За замовчуванням команда cp linux перезаписує існуючі файли або папки, але можна змусити утиліту питати потрібно перезаписувати кожен файл якщо ви не впевнені в правильності складання команди:

Є й протилежна опція -n, що означає ніколи не перезаписувати існуючі файли.

Опція -u дозволяє копіювати файл, тільки якщо вже існуючий старішої версії, ніж новий:

cp також підтримує спеціальні символи заміни * і. Наприклад, наступна команда скопіює всі файли, що починаються на test:

Якщо потрібно застосувати більш складні регулярні вирази, доведеться комбінувати утиліту cp з find або egrep.

У разі якщо важливо зберегти права доступу до файлу і його власника потрібно використовувати опцію -p:

Для спрощення використання команди можна використовувати синтаксис фігурних дужок. Наприклад, щоб створити резервну копію файлу виконайте:

Цією командою створюється файл з таким же ім'ям і розширенням .bak

За замовчуванням в cp не відображається прогрес копіювання файлу. що дуже незручно при роботі з великими файлами, але його можна легко подивитися за допомогою утиліти cv.

В утиліті find можна застосувати різні умови і регулярні вирази для пошуку файлів. Я вже трохи писав про неї в статті як знайти нові файли в Linux. Ми можемо скопіювати всі знайдені за допомогою find файли викликавши для кожного з них команду cp. Наприклад, копіюємо всі файли в поточному каталозі містять в імені тільки цифри:

$ Find. -name [0-9] -exec cp <>

Тут точка вказує на поточну директорію, а параметр name задає регулярний вираз. Параметром exec ми задаємо яку команду потрібно виконати для виявлених файлів. символ <> - підставляє ім'я кожного файлу.

Але не find'ом єдиним можна таке робити. Те ж саме можна отримати, надіславши запит список файлів директорії в ls, відфільтрувавши його по регулярному виразу egrep і передавши імена файлів по черзі в cp за допомогою xargs:

/ | egrep '[a-zA-Z]' | xargs cp -t

Це досить незручний спосіб копіювати файли linux але все ж, він можливий. Копіюються всі файли з домашньої директорії, що містять в імені тільки латинські букви.

$ Cat файл1> файл2

Якщо файл був не пустим, він буде перезаписаний. Або ми можемо склеїти два окремі файли в один:

$ Cat файл1 файл2> файл3

Утиліта cp теж може впоратися з таким завданням якщо вказати опцію -p, але можна використовувати утиліту архівації tar. Ми не будемо створювати ніяких файлів архівів, а побудуємо тунель. Перша частина команди пакує файл і відправляє на стандартний висновок, а інша, відразу ж розпаковує в потрібну папку:

$ Tar cf - / var | (Cd / mnt / var tar xvf -)

Тут ми повністю копіюємо вміст папки / var в папку / mnt / var. Так ви можете копіювати папку linux, при чому абсолютно будь-яку або навіть цілу операційну систему.