Копіювання файлів в 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, при чому абсолютно будь-яку або навіть цілу операційну систему.