Разное

Копирование файлов в линукс: Команда cp в Linux. 7 практических примеров

Содержание

Команда cp в Linux. 7 практических примеров

Команда cp в Linux используется для копирования файлов и каталогов. В этой статье вы узнаете некоторые основные применения команды cp.

Одна из команд, которые вы должны знать в Linux, – cp. Это сокращение от copy, и она делает именно то, что предполагает ее название: она копирует.

cp используется для копирования файлов из одного местоположения в другое. cp также можно использовать для копирования всех каталогов в новое место. Вы можете использовать его для копирования нескольких файлов и каталогов.

 

7 примеров использования команды cp в Linux

Давайте посмотрим, как вы можете использовать команду cp для различных целей:

 

1. Как скопировать файл

Самый простой пример – скопировать файл. Для этого вам просто нужно указать исходный файл и целевой каталог или файл.

cp source_file target_directory / target_file

 

В приведенном выше примере, если target_fille не существует в target_directory, он создаст файл target_file.

Однако, если новый_файл уже существует, он будет перезаписывать его, не спрашивая. Это означает, что содержимое существующего файла цели будет изменено с содержимым исходного файла.

Мы покажем вам, как бороться с перезаписью файлов позже в этой статье.

Примечание

Имейте в виду: по умолчанию команда cp перезаписывает, если целевой файл уже существует. Это поведение может быть изменено с помощью опции -n или -i, описанной ниже.

 

2. Как скопировать несколько файлов

Если вы хотите скопировать несколько файлов одновременно в новое место, вы можете сделать это следующим образом:

cp file1 file2 file3 fileN target_directory

 

Эта команда скопирует все указанные файлы в целевой каталог. Если в целевом каталоге есть файл(ы), соответствующий имени исходного файла (ов), он будет перезаписан.

 

3. Несколько способов обработки перезаписи при копировании файлов.

Вероятно, вы не всегда хотите, чтобы ваши существующие файлы целей были перезаписаны, и это абсолютно логично.

Чтобы предотвратить перезапись существующих файлов, вы можете использовать опцию -n. Таким образом, cp выиграл ‘перезаписать существующие файлы.

cp -n source_file target_directory

 

Но, возможно, вы хотите перезаписать некоторые файлы. Вы можете использовать интерактивную опцию -i, и она спросит вас, хотите ли вы перезаписать существующие файлы.

cp -i source_file target_directory
cp: overwrite 'target_directory/source_file'?

 

Вы можете ввести y для перезаписи существующего файла или n, чтобы не переписать его.

Существует также возможность создания автоматических резервных копий. Если вы используете опцию -b с командой cp, она перезапишет существующие файлы, но до этого она создаст резервную копию перезаписанных файлов.

cp -b file.txt target_dir / file.txt 
ls target_dir 
file.txt file.txt ~

 

Резервная копия файла заканчивается на ~.

Вы также можете использовать параметр обновления -u, когда имеете дело с перезаписью.  С параметром -u исходные файлы будут скопированы только в новое место, если исходный файл более новый, чем существующий, или если он не существует в целевом каталоге.

Подвести итоги:

  • -i: Подтвердить перед перезаписью
  • -n: Нет перезаписи
  • -b: Перезапись с резервным копированием
  • -u: Перезаписать, если целевой файл устарел или не существует

 

4. Как скопировать каталог

Вы также можете использовать команду cp для копирования всего каталога, включая все его файлы и подкаталоги. Вы должны использовать параметр -r здесь, который означает рекурсивный.

cp -r source_dir target_dir

 

Это скопирует весь source_dir в target_dir. Теперь source_dir будет подкаталогом target_dir.

ls target_dir 
source_dir

 

5. Как скопировать только содержимое каталога, а не самого каталога

В предыдущем примере вы скопировали весь каталог в новое место.

Но если вы просто хотите скопировать содержимое исходного каталога в целевой каталог, вы должны добавить /.  в конце исходного каталога. Это укажет на то, что вы хотите скопировать содержимое исходного каталога.

Посмотрим на пример:

ls source_dir 
source_file_1 source_file2

 

Теперь скопируйте содержимое исходного каталога:

cp -r source_dir /. target_dir

 

Если вы проверите содержимое целевого каталога сейчас, вы увидите, что было скопировано только содержимое исходного каталога.

ls target_dir 
source_file_1 source_file2

 

6. Как скопировать несколько каталогов

Вы также можете скопировать несколько каталогов одновременно с помощью команды cp в Linux.

Просто используйте его так же, как и для одного каталога.

cp -r source_dir1 source_dir2 source_dir3 target_dir

 

Это всегда последний аргумент в команде, который принимается как целевой каталог.

Если вы хотите скопировать только содержимое нескольких каталогов одновременно, вы также можете это сделать:

cp -r source_dir1 /.  source_dir2 /. source_dir3 /. target_dir

 

Фактически, вы можете смешивать каталоги, их содержимое и файлы в целом.

cp -r source_dir1 source_dir2 /. source_file target_dir

 

Совет

Вы можете использовать подробный режим с опцией -v, чтобы посмотреть, какие файлы копируются.

 

7. Как сохранить атрибуты при копировании

Когда вы копируете файл в новое место, его атрибуты, такие как права доступа к файлам и временные метки файла, изменяются.

Если вы хотите сохранить атрибуты исходного файла, вы можете скопировать файлы с помощью опции -p.

Давайте посмотрим на пример.

ls -l /etc/services 

-rw-r - r-- 1 root root 19183 12 Jan 2018 /etc/services

 

Если я попытаюсь скопировать этот файл, его атрибуты будут изменены:

ls -l /etc/services 
-rw-r--r-- 1 root root 19183 Jan 12  2018 /etc/services

 

Но если мы используем параметр p, скопированный файл сохранит режим, право собственности и отметку времени.

cp /etc/services .
ls -l services 
-rwxrwxrwx 1 andreyex andreyex 19183 Nov 27 23:16 services

 

Как вы можете видеть, вы сохранили режим доступа и временную метку исходного файла с опцией -p.

Но подождите! Разве это не должно было сохранить право собственности на исходные файлы? Но вот владелец (root) исходного файла был изменен на andreyex,

Это связано с тем, что только root имеет разрешение на изменение права собственности на файл, принадлежащий root. Если вы используете опцию -p с файлом, не принадлежащим root, он сохранит право собственности. Или вы можете запустить команду с помощью sudo, это сохранит право собственности на файл, принадлежащий root.

Вы также можете указать атрибуты, которые хотите сохранить. Но тогда вам придется использовать опцию -preserve.

cp --preserve=timestamp /etc/services .
ls -l services 
-rw-r--r-- 1 andreyex andreyex 19183 Jan 12  2018 services

 

Как видно из вышеприведенного вывода, команда сохранила только временную метку исходного файла.

Примеры, показанные здесь, являются наиболее распространенными, которые вы будете использовать в качестве пользователя Linux, сисадмина или разработчика программного обеспечения.

Если вам понравилась эта статья, пожалуйста, поделитесь этой статьей о социальных сетях и различных форумах.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Как правильно скопировать файлы и папки исключая некоторые из них / Хабр

Топик написан в ответ на похожий.

Автор оригинального топика предлагает решить задачу в лоб — а именно, скопировать все файлы а потом удалить не нужные. Это может быть неплохим решением, если вам, конечно, не нужно скопировать всю домашнюю папку на флешку, за исключением вашей коллекции видео.

Но главная проблема этого подхода в другом — он не соответствует идеологии unix: сложные задачи решаются комбинацией простых утилит.

Под катом подробности о методах решения этого класса задач — не рассматривайте это как готовый рецепт.

0. Декомпозиция

Решение любой комплексной задачи начинается с разбора её на составные части. Итак нам нужно скопировать некоторый набор файлов предварительно его отфильтровав.
Значит — получение списка файлов, фильтрация, копирование.
1. Получение списка файлов

Обычно мы просматриваем список файлов программой ls. Её вывод выглядит примерно так:

$ ls -1
dir1
dir2
file1.bin
file2.txt

Подходит ли там такой вывод? Нет, потому, что в нем недостаточно информации — нам нужно копировать файлы рекурсивно, значит для нас было-бы гораздо удобнее если первая в нашей цепочке программа выдала там имена файлов вместе с путями.

Следующая программа, которая приходит на ум — find

$ find ./
./
./dir1
./dir1/file7.txt
./dir2
./file1.bin
./file2.txt

Уже лучше но в вывод попали и директории, а они нам не нужны. Попробуем так:
$ find ./ -type 'f'
./dir1/file7.txt
./file1.bin
./file2. txt

Вот то, что там нужно. Список файлов.

2. Фильтрация

Этот список файлов нужно отфильтровать. Перенаправим вывод нашей предыдущей комманды в программу grep.

$ find ./ -type 'f' | grep 2
./dir2
./file2.txt

Хорошо, но в условиях задачи стоит исключать файлы, так что немного поменеяем наш конвейер

$ find ./ -type 'f' | grep -v 2
./dir1/file7.txt
./file1.bin

Первые две части выполнены.

3. Копирование

Из man-страницы для команды

cp мы можем узнать, что исходный файл нужно передавать программе cp в качестве аргумента, а мы пока можем только перенаправить список на стандартный ввод.
Применим утилиту xargs — она принимает стандартный ввод и вызывает указанную программу с параметрами из стандартного ввода. Итак:

$  find ./ -type 'f' | grep -v 2 | xargs -n 1 -I % cp --parents  "%"  /path/to/dest/dir/

-n 1 значит, что только одна строка из стандартного ввода подставляется в комманду, а -I % — определяет символ, который будет заменен в целевой комманде на строчку из стандартного ввода. В нашем случае это будет
 cp --parents  "./dir1/file7.txt"  /path/to/dest/dir/
 cp --parents  "./file1.bin"  /path/to/dest/dir/

Можно считать, что задача решена.

Вместо заключения

Я надеюсь что это описание поможет правильно подходить к решению как таких простых так и более комплексных задач.

Хочется отметить, что

  • Это топик способах решения задач и немного о применении конвейера, а не о копировании файлов
  • Этот способ далеко не едиственный и даже не самый короткий, а наиболее наглядный для демонстрации методологии решения.
  • В случае этой конкретной задачи будет быстрее воспользоваться find ./ -type f ! -name "*2*" -exec cp --parents -t /target/dir "{}" \+
  • Лично я воспользовался-бы tar --exclude=2 -cf - ./ | ( cd /path/to/dest/ && tar -xvf - )
  • Т.к. это первый мой топик, буду рад конструктивной критике

Работа с DD. Утилита для побайтового копирования. Начало

В UNIX-подобных системах есть одна интересная команда, которая занимается побайтным копированием чего-то из одного места в другое.

На первый взгляд кажется, что это сущий пустяк, но если разобрать работу с этой утилитой на практике – открывается масса возможностей её применения.

Имя этой утилите – dd.

Какие операции возможно производить с её помощью:

  • Создание дампа данных с различных носителей;
  • Резервное копирование и восстановление MBR;
  • Анализ файловой системы, индексных дескрипторов и поиск удалённых файлов;
  • Зеркалирование носителей информации;
  • Создание файлов произвольного размера и содержания;
  • Запись в файл/чтение из файла по произвольному смещению и произвольным размером;
  • …многое другое, перечень задач ограничивается лишь извращённой фантазией линуксоидов;

Небольшой пример, демонстрирующий общие принципы работы с утилитой.

Пример 1. Создание произвольного файла нужного размера.

# dd if=/dev/urandom of=my.rnd bs=1 count=30

Разберём основные параметры:

  • if (input file) – источник, откуда копируем данные;
  • of (output file) – получатель, куда копируем;
  • bs (block size) – размер блока, записывается в байтах. Можно использовать суффиксы K, M, а так же использовать операции умножения, об этом ниже.
  • count – количество таких блоков.

Таким образом, вышеприведённая команда копирует 30 блоков размером в 1 байт из устройства случайных значений в файл my.rnd

Кстати, рекомендую дампы перенаправлять на вход утилиты hexdump с ключом -C.

Пример 2. Работа с блочными данными. Образ CD-ROM

Первым делом необходимо смонтировать диск. Для этого я воспользуюсь утилитой mount_cd9660, которая находится в каталоге /sbin. Она понимает файловую систему компакт-диска, но вы без проблем можете использовать обычный mount.

# /sbin/mount_cd9660 -e /dev/acd0t01 /cdrom

Монтирую устройство /dev/acd0t01 в каталог /cdrom, имя устройства я узнал выполнив поиск:

# ls -la /dev/*cd*

Итак, устройство смонтировали, прочитаем один стандартный блок файловой системы ISO cd9660. Напоминаю, если кто не знает, что стандартный размер блока равен 2048 байт.

# dd if=/cdrom of=/root/TEST/cd2k.img bs=1Kx2 count=1

Прошу обратить внимание, что в параметре bs я использовал сразу две фишки. Суффикс К = 1024 и знак х – умножение. Т.е. запись 1Kx2 (1Кб * 2) эквивалентна 1024×2 или 2048. Просто иногда удобно указывать суффиксы, иногда – умножать, а иногда – прямым значением. Гибкость – залог успеха, верно?

Так же прошу обратить внимание на вывод утилиты.

1+0 records in

1+0 records out

Это значит, что скопирована 1 полная запись на источнике и записана одна полная запись на получатель. Если было бы 3+1, то это означало бы, что взято 3 целых блока и ещё 1 неполный. Такое могло быть, если бы я не указал count, а размер файла источника был бы равен, например, 6200 байт. Трижды по 2048 (это будет 6144 байт) и остальные 56 байт – это было бы то, что после +. Ну, надеюсь не запутал. То есть целые и нецелые блоки данных. Вот что важно.

Вот такой вот важный параметр bs. К слову, существуют ещё три парметра размера блока:

  • ibs – размер входного блока;
  • obs – размер выходного блока;
  • cbs – размер буфера преобразования, о нём потом.

Но если указан размер bs, то все остальные размеры блоков игнорируются. Такой вот параметр-“папа”.

Пример 3. Сохранение копии MBR с диска.

Как известно, MBR находится в первых 512 байтах первого сектора

# dd if=/dev/ad0s1 bs=512 count=1 | hexdump -C | less

Думаю, параметры тут не вызывают вопросов. 512 байт с 1-го сектора, перенаправление в hexdump и постраничный вывод. Сохранённый mbr лучше запрятать подальше, хранится там важная вещь – загрузчик и таблица разделов. Кстати, увидели в конце загрузочной записи сигнатуру 55 AA? Это особый знак, который сигнализирует компьютеру о таблице разделов.

Если нам нужна не вся MBR, а только лишь загрузочный код, который занимает 446 байт, то нам пригодится новый параметр.

Помимо этого существуют параметры пропуска N-ого количества блоков от начала файла (входного или выходного).

  • seek=n – пропускает n блоков (размера bs) в выходном файле (of) прежде чем начинает туда записывать.
  • skip=n – пропускает n блоков (размером bs) во входном файле (if) прежде чем начать оттуда считывать.

Варьируя эти параметры можно добиться ошеломляющих результатов.

Пример 4. Запись произвольной части произвольного файла.

На мой взгляд, очень показательный пример. Имеем текстовый файл. Выполняем команду:

# echo "ALL " | dd of=out. txt bs=1 seek=6 conv=notrunc

То есть подаём строку ALL на вход утилиты dd, которая пишет на выход в файл out.txt начиная с 6-го блока (размером в 1 байт) и остаток файла не обрезает (conv=notrunc), с параметрами конвертации ознакомьтесь из man dd, особенно рекомендую noerror.

Засим откланиваюсь! Всего доброго! Надеюсь, было прикольно.

Как использовать команду rsync для копирования файлов в Ubuntu — Linux Подсказка

rsync — это инструмент для копирования файлов. rsync используется для копирования файлов с вашего компьютера на удаленный компьютер, с удаленного компьютера на ваш компьютер, из каталога в другой каталог на том же компьютере, с вашего компьютера на внешний жесткий диск или сетевой ресурс и т. д. rsync также может быть используется для создания инкрементных резервных копий.

В этой статье я покажу вам, как использовать команду rsync для копирования файлов и каталогов и создания инкрементного резервного копирования. Я буду использовать Ubuntu для демонстрации. Но любой современный дистрибутив Linux должен работать нормально. Итак, приступим.

Установка rsync:

rsync уже должен быть установлен в Ubuntu. Но, если он по какой-то причине не установлен на вашем компьютере, вы можете легко установить его из официального репозитория пакетов Ubuntu с помощью следующей команды:

$ sudo apt install rsync -y

Формат команды rsync:

Основной формат команды rsync:

Параметры $ rsync источник назначения

  • источник может быть файлом, каталогом или сетевым путем.
  • Назначение может быть каталогом или сетевым путем.
  • У
  • rsync много опций. Вы можете изменить поведение rsync, используя эти параметры. По пути мы рассмотрим некоторые из наиболее распространенных вариантов.

При использовании rsync вам необходимо знать следующее:

  • Если вы поместите / после имени каталога в -источнике rsync, например, myfiles / , то это означает, что все файлы будут скопированы только из каталога в пункт назначения .
  • Если вы не поместите / после имени каталога в source rsync, например myfiles , то rsync скопирует все файлы из каталога в пункт назначения , включая каталог.
  • Если вы введете путь к несуществующему каталогу назначения , то rsync автоматически создаст его по мере необходимости.

Резервное копирование локальных файлов и каталогов с помощью rsync:

Вы можете очень быстро копировать файлы из одного каталога в другой на вашем компьютере с помощью rsync .

Например, у вас есть важные файлы в каталоге ~ / Downloads . Теперь вы хотите сделать резервную копию всех файлов из каталога ~ / Downloads на флэш-накопитель USB / dev / sdb1 , смонтированный в каталоге / mnt / myusb .

Давайте создадим несколько фиктивных файлов в каталоге ~ / Downloads .

$ touch ~ / Загрузки / тест {1..100}

Теперь скопируйте все файлы из каталога ~ / Downloads в каталог / mnt / myusb с помощью следующей команды rsync:

$ rsync -avzh ~ / Загрузки / / mnt / myusb

Файлы следует скопировать.

Как видите, файлы находятся в каталоге / mnt / myusb .

Вы также можете скопировать весь каталог ~ / Downloads на флэш-накопитель USB следующим образом:

$ rsync -avzh ~ / Загрузки / mnt / myusb

Как скопировать каталог в командной строке Linux

Если вы новичок в командной строке Linux, вы, вероятно, имеете в виду следующий вопрос: как скопировать каталог и файлы внутри него в другой каталог в командной строке Linux?

Вот как скопировать каталог в Linux:

  cp -r исходный_каталог целевой_каталог  

Вы, наверное, уже знаете, что вы можете использовать команду cp для копирования файлов в Linux. Знаете ли вы, что вы можете использовать ту же команду cp для копирования папки в командной строке Linux?

Ха! Вы уже пробовали это и, возможно, получили следующую ошибку:

  cp: -r not specified; исключение каталога test_dir  

Позвольте мне показать вам кое-что о копировании каталога в Linux.

Копировать каталог в командной строке Linux

Определенно можно использовать ту же команду cp, но с рекурсивной опцией -r, чтобы скопировать папку с ее содержимым в другую папку.Вышеупомянутая ошибка также указывает на то, что вы пропустили опцию -r.

Все, что вам нужно сделать, это использовать команду следующим образом:

  cp -r исходный_каталог целевой_каталог  

И теперь, если вы используете команду ls в целевом каталоге, внутри него должен быть весь исходный каталог.

Параметр -r разрешает рекурсивный параметр. Это означает, что все содержимое каталога, включая его собственные подкаталоги, все в каталоге будет скопировано в место назначения.

Несколько замечаний о копировании каталогов в Linux

Вот несколько замечаний и советов по копированию папок.

Целевой каталог не существует? Он будет создан

Если целевой каталог не существует (но путь существует), он будет создан до одного уровня (поясняется в следующем разделе). Однако теперь он будет копировать содержимое исходного каталога, а не самого исходного каталога.

Например, если вы сделаете это:

  cp -r source_directory non_existing_directory  

Non_existing_directory будет создан с содержимым source_directory, но в нем не будет source_directory.Будут скопированы только файлы из source_directory. Это будет похоже на то, что non_existing_directory будет репликой source_directory.

  abhishek @ linuxhandbook: ~ $ ls
test_dir
abhishek @ linuxhandbook: ~ $ cp -r test_dir новый_каталог
abhishek @ linuxhandbook: ~ $ tree
 .
 ├── new_dir
 │ ├── c.xyz
 │ ├── myzip1.zip
 │ └── myzip2.zip
 └── test_dir
     ├── c. xyz
     ├── myzip1.zip
     └── myzip2.zip
 2 каталога, 6 файлов  
Невозможно создать вложенный каталог при копировании

Вы не можете использовать указанную выше команду для создания структуры вложенных каталогов.

Например, если вы попытаетесь использовать cp -r исходный_каталог dir1 / dir2 / dir3, но dir2 и dir3 не существуют, это не создаст структуру вложенных каталогов, и команда завершится ошибкой.

Сохраните исходные атрибуты файла

Последний совет, чтобы не усложнять. Если вы используете параметр -a вместе с параметром -r, он сохранит исходную информацию о файле, такую ​​как права доступа к файлу, временные метки файла и т. Д. Он заархивирует каталог в новое место вместо того, чтобы создавать его заново.

Вот и все

Этого количества информации должно быть достаточно, чтобы вы знали, как скопировать каталог в Linux. Если у вас есть вопросы или предложения, не стесняйтесь оставлять комментарии.

Linux и Unix: руководство по командам cp с примерами

Linux и Unix: руководство по командам cp с примерами | Джордж Орнбо

Последнее обновление

Учебное пособие по использованию cp, команды UNIX и Linux для копирования файлов и каталогов.Примеры копирования файла, копирования нескольких файлов, копирования каталога, создания резервной копии при копировании и сохранения атрибутов файла при копировании.

Расчетное время чтения: 4 минуты

Содержание

Что такое команда cp?

Команда cp — это служебная программа командной строки для копирования файлов и каталогов. Он поддерживает перемещение одного или нескольких файлов или папок с возможностью резервного копирования и сохранения атрибутов. Копии файлов не зависят от исходного файла, в отличие от команды mv .

Как скопировать файл

Чтобы скопировать файл с помощью команды cp , передайте имя файла, который нужно скопировать, а затем место назначения. В следующем примере файл foo.txt копируется в новый файл с именем bar.txt . Команда cp также создаст новый файл как часть операции.

  лс
foo.txt
cp foo.txt bar.txt
ls
foo.txt bar.txt
  

Как скопировать несколько файлов

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

  дерево -F
.
├── bar.txt
├── baz.txt
├── foo /
└── foo.txt
cp foo.txt bar.txt baz.txt foo /
дерево.
.
├── bar.txt
├── baz.txt
├── фу
│ ├── bar.txt
│ ├── baz.txt
│ └── foo.txt
└── foo.txt
  

Эту же операцию можно выполнить с помощью сопоставления с образцом

  cp * .txt foo /
  

Как скопировать каталог

По умолчанию команда cp не копирует каталоги. Попытка скопировать каталог приводит к ошибке.

  cp directory / foo
cp: исключение каталога 'directory /'
  

Чтобы скопировать каталог, передайте флаг -R . Это рекурсивно скопирует папку и создаст копию.

  cp -R каталог / foo
  

Как скопировать несколько каталогов

Чтобы скопировать несколько каталогов, передайте путь к каталогам, которые нужно скопировать, за которым следует каталог назначения.

  дерево.
.
├── бар
│ └── bar.txt
├── баз
│ └── baz.txt
├── фу
│ └── фу.текст
└── some-directory
cp foo bar baz какой-то каталог
дерево.
.
├── бар
│ └── bar.txt
├── баз
│ └── baz.txt
├── фу
│ └── foo.txt
└── some-directory
    ├── бар
    │ └── bar.txt
    ├── баз
    │ └── baz.txt
    └── фу
        └── foo.txt
  

Как сделать резервную копию при копировании файла

Если операция копирования перезапишет файл, можно использовать флаг -b для создания резервной копии файла. Это копирует файл на место и записывает файл резервной копии.

  лс
фу.txt bar.txt
cp -b foo.txt bar.txt
ls
foo.txt bar.txt bar.txt ~
  

Чтобы указать имя файла резервной копии, используйте параметр -S .

  лс
foo.txt bar.txt
cp -S .bak foo.txt bar.txt
ls
foo.txt bar.txt bar.txt.bak
ls
foo.txt bar.txt bar.txt.bak
  

Как запрашивать подтверждение при копировании файла

Чтобы запрашивать подтверждение при копировании файла, передайте флаг -i . Обычно при использовании команды cp целевой файл будет перезаписан, если он существует при копировании.Используя флаг -i , команда предложит перезаписать файл.

  лс
foo.txt bar.txt
cp -i foo.txt bar.txt
cp: перезаписать bar.txt?
  

Как создать жесткую ссылку вместо копирования

Чтобы создать жесткую ссылку вместо копирования с помощью команды cp , передайте параметр -l . Вместо копирования файла будет создан новый файл, который является жесткой ссылкой на данные на диске. Вот учебник по жестким, символическим или программным ссылкам.

  лс
foo.txt
кот foo.txt
foo text
cp -l foo.txt bar.txt
echo 'текст строки'> bar.txt
кот foo.txt
текст строки
  

Как сохранить атрибуты файла

Чтобы сохранить атрибуты файла (разрешения, принадлежность группы и пользователя), передайте параметр --preserve вместе с атрибутами, которые необходимо сохранить. По умолчанию будут сохранены права собственности и временные метки.

  ls -la
-rw ------- 1 пользователей george 0 13 окт 09:14 foo.txt
cp --preserve foo.txt bar.текст
-rw ------- 1 пользователей george 0 13 окт 09:14 bar.txt
-rw ------- 1 пользователей george 0 13 окт 09:14 foo.txt
  

Как показать файлы, которые копируются

Чтобы показать файлы, которые копируются, передайте опцию -v в cp . Это напечатает файлы и папки, которые копируются на стандартный вывод. В следующем примере каталог foo копируется как bar вместе с содержимым.

  cp -R -v foo bar
'foo' -> 'бар'
'фу / фу.txt '->' bar / foo.txt '
'foo / bar.txt' -> 'bar / bar.txt'
  

Дополнительная литература

У вас есть обновления или предложения по этой статье? Вы можете отредактировать его здесь и отправить мне запрос на перенос.

Теги

Недавние сообщения

Об авторе

Джордж Орнбо (George Ornbo) — инженер-программист из Бакингемшира, Англия.

Он является автором Sams Teach Yourself Go за 24 часа и Sams Teach Yourself Node.js за 24 часа. Его можно найти в большинстве обычных мест в виде фигур.

← http://shapeshed.com

Контент находится под лицензией Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)

Копирование файлов между Windows и Linux с помощью PuTT …

Вот изящный способ передачи файлов между вашим ПК с Windows и вашим проектом Linux (Ubuntu) с помощью Ethernet.

PuTTY — это программа, которая подключает одно устройство к другому по сети. Среди прочего, он поддерживает SSH и Telnet.

PuTTY — это «клиентское» приложение, которое взаимодействует с «хостом». На хосте должен быть запущен SSH-сервер (что часто бывает в системах с iMX Linux).

Существует версия для Windows, которая идеально подходит для передачи файлов между вашим ПК с Windows и платформой Linux.

Загрузите PuTTY здесь: http://www.chiark.greenend. org.uk/~sgtatham/putty/

Выберите версию установщика Windows. При этом будут установлены программы и файлы справки, которые вам понадобятся.

Передача файлов может осуществляться с использованием PSCP (Putty Secure CoPy) или PSFTP (Putty Secure File Transfer Protocol).

PSFTP можно запустить из Windows Пуск.

PSCP необходимо запустить из окна DOS (StartWingdings «»> àRun и введите cmd, затем нажмите OK). Перед тем, как
запустит PSCP, вам необходимо установить переменную пути. В командной строке DOS введите

set PATH = C: \ Program Files \ PuTTY

Предполагается, что вы установили PuTTY в C: \ Program Files \ PuTTY (по умолчанию). Обратите внимание на косую черту «\».

Это будет работать только в течение времени существования этого конкретного окна консоли.Чтобы установить PATH более постоянно в Windows NT, 2000 и XP, используйте вкладку «Дополнительно» на панели управления системой (щелкните правой кнопкой мыши MyComputer и выберите «Свойства»). Нажмите кнопку «Переменные среды», выделите «путь» и отредактируйте его. Добавьте «; C: \ Program Files \ PuTTY» в конце строки
. Затем вы можете проверить правильность пути, набрав «путь» в командной строке DOS.

Формат для pscp прост:

pscp [параметры] исходное назначение

Чтобы скопировать файл Windows в систему Linux, в командной строке DOS введите

pscp c: / music.mp3 [email protected]: / home / ubuntu / Music

, который скопирует файл music.mp3 в мою папку Music в Linux. Мой Ubuntu EVK имеет IP-адрес 10.0.0.3. (Обратите внимание, что вы можете использовать / или \ для файлов и каталогов Windows, но вы должны использовать / при указании файлов Linux.)

Обратное также работает (скопируйте файл Linux в Windows)

pscp [email protected]. 0.3: /home/ubuntu/Music/music.mp3 c: /

Это копирует файл music.mp3 из Linux в мой корневой каталог C.

Доступно множество других опций, включая возможность использования протокола ftp. См. Файл справки для получения дополнительной информации.

Команда

cp в Linux / Unix | копировать файлы / каталоги

cp — это команда оболочки Linux для копирования файлов и каталогов.

Синтаксис команды cp

Копировать из источника в dest

$ cp [ options ] source dest

Параметры команды cp

Основные параметры команды cp:

Обновление
опция описание
cp -a архивных файлов
cp -f принудительное копирование, удалив целевой файл, если необходимо
cp -i интерактивный — спросите перед перезаписью
cp -l ссылки файлов вместо копии
cp -L переход по символическим ссылкам
cp -n без перезаписи файла
cp -R рекурсивная копия (включая скрытые файлы)
cp -u — копировать, если источник новее, чем dest
cp -v verbose — вывод информационных сообщений

Примеры команды cp

Копировать отдельный файл main. c в каталог назначения bak :

$ cp main.c bak

Скопируйте 2 файла main.c и def.h в каталог с абсолютным путем назначения / home / usr / rapid / :

$ cp main.c def.h / home / usr / rapid /

Скопируйте все файлы C в текущем каталоге в подкаталог bak :

$ cp * .c bak

Копировать каталог src в каталог с абсолютным путем / home / usr / rapid / :

$ cp src / главная / usr / rapid /

Рекурсивно скопировать все файлы и каталоги в dev в подкаталог bak :

$ cp -R дев бак

Принудительное копирование файла:

$ cp -f test.c бак

Интерактивная подсказка перед перезаписью файла:

$ cp -i test.c bak
cp: перезаписать bak / test.c? y

Обновить все файлы в текущем каталоге — копировать только новые файлы в каталог назначения bak :

$ cp -u * bak

Генератор кода CP

Выберите cp options и нажмите кнопку Generate Code :


См. Также

objcopy (1): копирование / перевод объектных файлов — справочная страница Linux

Имя

objcopy — копирование и перевод объектных файлов

Сводка

objcopy [ -F bfdname | —target = bfdname ] [ -I bfdname | —input-target = bfdname ] [ -O bfdname | —output-target = bfdname ] [ -B bfdarch | —binary-architecture = bfdarch ] [ -S | — все полосы ] [ -g | —strip-debug ] [ -K имя символа | —keep-symbol = имя символа ] [ -N symbolname | —strip-symbol = symbolname ] [ —strip-undeeded-symbol = symbolname ] [ -G symbolname | —keep-global-symbol = имя символа ] [ —localize-hidden ] [ -L symbolname | —localize-symbol = symbolname ] [ —globalize-symbol = symbolname ] [ -W symbolname | —weaken-symbol = symbolname ] [ -w | —wildcard ] [ -x | — сбросить все ] [ -X | —discard-locals ] [ -b байт | —byte = byte ] [ -i interleave | —interleave = interleave ] [ -j имя раздела | —only-section = имя раздела ] [ -R имя раздела | —remove-section = имя раздела ] [ -p | —preserve -ates ] [ —debugging ] [ —gap-fill = val ] [ —pad-to = адрес ] [ —set-start = val ] [ —adjust-start = incr ] [ —change-addresses = incr ] [ —change-section-address section {=, +, -} val ] [ —change-section-lma section {=, +, -} val ] [ —change-section-vma section {=, +, -} val ] [ —change-warnings ] [ —no-change-warnings ] [ —set-section-flags section = flags ] [ —add-section sectionname = filename ] [ —rename-section oldname = newname [, flags ]] [ —long-section-names {enable, disable, keep}] [ —change -ading-char ] [ —remove -ading-char ] [ —reverse-bytes = num ] [ —srec-len = ival ] [ —srec-forceS3 ] [ — redefine-sym старый = новый ] [ —redefine-syms = filename ] [ —weaken ] [ —keep-symbols = filename ] [ —strip-symbols = filename ] [ —strip-undeeded-symbols = filename ] [ —keep-global-symbols = filename ] [ —localize-symbols = filename ] [ —globalize-symbols = filename ] [ —weaken-symbols = filename ] [ —alt-machine-code = index ] [ —prefix-symbols = string ] [ —prefix-section = string ] [ —prefix-alloc-section = строка ] [ —add-gnu-debuglink = путь к файлу ] [ —keep-file-symbols ] [ —only -keep-debug ] [ —extract-symbol ] [ —writable-text ] [ —readonly-text ] [ —pure ] [ —impure ] [ —file-alignment = число ] [ —heap = размер ] [ —image-base = адрес ] [ —section-alignment = num ] [ —stack = size ] [ —subsystem = который : основной . младший ] [ -v | — выводить ] [ -V | —version ] [ —help ] [ —info ] infile [ outfile ]

Описание

Утилита GNU objcopy копирует содержимое объектного файла в другой. objcopy использует библиотеку GNU BFD для читать и записывать объектные файлы. Он может записывать целевой объектный файл в формате, отличном от формата исходного объектного файла.Точное поведение objcopy управляется параметрами командной строки. Обратите внимание, что objcopy должен иметь возможность копировать полностью связанный файл между любыми двумя форматами. Тем не мение, копирование перемещаемого объектного файла между любыми двумя форматами может не работать должным образом.

objcopy создает временные файлы для перевода и затем удаляет их. objcopy использует BFD для выполнения всего перевода Работа; он имеет доступ ко всем форматам, описанным в BFD , и, таким образом, может распознавать большинство форматов без явного указания.

objcopy можно использовать для генерации S-записей с использованием цели вывода srec (например, используйте -O srec ).

objcopy можно использовать для создания необработанного двоичного файла с помощью цели вывода двоичного файла (например, используйте -O двоичный ). Когда objcopy генерирует необработанный двоичный файл, по сути, он создает дамп памяти содержимого входного объектного файла. Все символы и информация о перемещении будут отброшен.Дамп памяти начнется с адреса загрузки самого нижнего раздела, скопированного в выходной файл.

При создании S-записи или необработанного двоичного файла может быть полезно использовать -S для удаления разделов, содержащих отладочную информацию. В некоторых случаях -R будет полезно для удаления разделов, содержащих информацию, которая не нужна двоичному файлу.

Примечание — objcopy не может изменить порядок байтов входных файлов. Если формат ввода имеет порядок байтов (в некоторых форматах нет), objcopy может копировать входные данные только в форматы файлов, которые имеют такой же порядок следования байтов или не имеют порядка байтов (например,г., srec ). (Однако см. — опция обратных байтов .)

Опции

инфиль

аутфил
Входные и выходные файлы соответственно. Если вы не укажете outfile , objcopy создаст временный файл и деструктивно переименует результат с именем в инфиле .
-I bfdname
—input-target = bfdname
Считайте, что формат объекта исходного файла равен bfdname , вместо того, чтобы пытаться вычислить его.
-O bfdname
—output-target = bfdname
Запишите выходной файл, используя формат объекта bfdname .
-F bfdname
—target = bfdname
Используйте bfdname в качестве формата объекта как для входного, так и для выходного файла; т. е. просто передавать данные из источника в пункт назначения без перевод.
-B bfdarch
—binary-architecture = bfdarch
Полезно при преобразовании входного файла без архитектуры в объектный файл.В этом случае архитектура вывода может быть установлена ​​на bfdarch . Этот вариант будет проигнорирован, если входной файл имеет известный bfdarch . Вы можете получить доступ к этим двоичным данным внутри программы, ссылаясь на специальные символы, которые созданный в процессе преобразования. Эти символы называются _binary_ objfile _start, _binary_ objfile _end и _binary_ objfile _size. например ты может преобразовать файл изображения в объектный файл, а затем получить к нему доступ в вашем коде, используя эти символы.
-j имя раздела
—only-section = имя раздела
Скопируйте только названный раздел из входного файла в выходной файл. Этот вариант можно давать более одного раза. Обратите внимание, что неправильное использование этой опции может сделать выходной файл непригодным для использования.
-R имя раздела
—remove-section = имя раздела
Удалите из выходного файла любой раздел с именем имя раздела .Этот вариант можно давать более одного раза. Обратите внимание, что неправильное использование этой опции может сделать выходной файл непригодным для использования.
-S
— все полоски
Не копируйте информацию о перемещении и символах из исходного файла.
— полоска-отладка
Не копируйте символы отладки или разделы из исходного файла.
— полоска-не нужна
Удалите все символы, которые не нужны для обработки перемещения.
-K имя символа
—keep-symbol = имя символа
При удалении символов оставьте символ имя символа , даже если он обычно удаляется. Этот вариант можно давать более одного раза.
-N условное обозначение
—strip-symbol = имя символа
Не копируйте символ имя символа из исходного файла. Этот вариант можно давать более одного раза.
— ненужный символ полосы = имя символа
Не копируйте символ имя символа из исходного файла, если это не требуется при перемещении. Этот вариант можно давать более одного раза.
-G имя символа
—keep-global-symbol = имя символа
Оставить только символ имя символа global. Сделайте все остальные символы локальными для файла, чтобы они не были видны извне.Этому варианту можно дать еще чем однажды.
—localize-hidden
В объекте ELF отметьте все символы, которые имеют скрытую или внутреннюю видимость, как локальные. Эта опция применяется поверх специфичных для символа варианты локализации, такие как -L .
-L имя символа
—localize-symbol = имя символа
Сделайте символ имя символа локальным для файла, чтобы он не был виден извне.Этот вариант можно давать более одного раза.
-W имя символа
—weaken-symbol = имя символа
Сделайте symbol symbolname weak. Этот вариант можно давать более одного раза.
—globalize-symbol = symbolname
Задайте символ symbolname глобальную область видимости, чтобы он был виден за пределами файла, в котором он определен. Этот вариант может быть предоставлен более чем один раз.
-w
— дикая карта
Разрешить регулярные выражения в symbolname s, используемые в других параметрах командной строки. Знак вопроса (?), Звездочка (*), обратная косая черта (\) и квадратные скобки Операторы ([]) могут использоваться в любом месте имени символа. Если первый символ имени символа — восклицательный знак (!), То смысл переключателя следующий. перевернутый для этого символа. Например:
 -w -W! Foo -W fo * 
заставит objcopy ослабить все символы, начинающиеся с «fo», за исключением символа «foo».
— сбросить все
Не копируйте неглобальные символы из исходного файла.
-X
—discard-locals
Не копируйте локальные символы, созданные компилятором. (Обычно они начинаются с L или . .)
-b байт
—byte = byte
Сохранять только каждые байт -й байт входного файла (данные заголовка не затрагиваются). байт может быть в диапазоне от 0 до чередование -1, где чередование задается параметром -i или —interleave или значением по умолчанию 4. Этот параметр полезен для создания файлов для программирования. ПЗУ . Обычно он используется с целью вывода «srec».
-i чередование
—interleave = Interleave
Копировать только один из каждых чередующихся байтов.Выберите, какой байт копировать, с помощью опции -b или —byte . По умолчанию — 4. objcopy игнорирует этот параметр, если вы не укажете -b или —byte .
-п
— финики консервирования
Установите даты доступа и изменения выходного файла, чтобы они были такими же, как и у входного файла.
— отладка
Преобразуйте отладочную информацию, если возможно.Это не по умолчанию, потому что поддерживаются только определенные форматы отладки, и процесс преобразования может быть кропотливый.
— заполнение зазора val
Заполните промежутки между секциями с помощью val . Эта операция применяется к загрузке с адресом ( LMA ) секций.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *