Linux копировать найденный файлы

КОПИРОВАНИЕ ФАЙЛОВ В LINUX

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

Не всегда есть доступ к файловому менеджеру, на серверах, например, доступен только консольный интерфейс, или из-за различных поломок графическая оболочка на домашнем компьютере может быть недоступна. К тому же копирование файлов ubuntu через терминал намного эффективнее и вы сами в этом убедитесь. Сегодня мы рассмотрим не только обычное копирование командой cp Linux, но и не совсем обычное — с помощью tar и find.

УТИЛИТА КОПИРОВАНИЯ ФАЙЛОВ CP

Название утилиты cp — это сокращение от Copy, что означает копировать. Утилита позволяет полностью копировать файлы и директории.

СИНТАКСИС И ОПЦИИ

Общий синтаксис cp выглядит вот так:

$ cp опции файл-источник файл-приемник

$ cp опции файл-источник директория-приемник/

После выполнения команды файл-источник будет полностью перенесен в файл-приемник. Если в конце указан слэш, файл будет записан в заданную директорию с оригинальным именем.

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

  • —attributes-only — не копировать содержимое файла, а только флаги доступа и владельца;
  • -f, —force — перезаписывать существующие файлы;
  • -i, —interactive — спрашивать, нужно ли перезаписывать существующие файлы;
  • -L — копировать несимволические ссылки, а то на что они указывают;
  • -n — не перезаписывать существующие файлы;
  • -P — не следовать символическим ссылкам;
  • -r — копировать папку linux рекурсивно;
  • -s — не выполнять копирование файлов в linux, а создавать символические ссылки;
  • -u — скопировать файл, только если он был изменен;
  • -x — не выходить за пределы этой файловой системы;
  • -p — сохранять владельца, временные метки и флаги доступа при копировании;
  • -t — считать файл-приемник директорией и копировать файл-источник в эту директорию.

ПРИМЕРЫ КОПИРОВАНИЯ ФАЙЛОВ В LINUX

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

Или можем явно указать имя новой картинки:

Копирование папок осуществляется с помощью ключа -r:

После выполнения этой команды копирования

/папка будет скопирована в папку

/Документы. Главное, не забывайте поставить слэш в конце выражения или использовать опцию -t. Иначе папка

/документы будет перезаписана.

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

Есть и противоположная опция -n, означающая никогда не перезаписывать существующие файлы.

Опция -u позволяет копировать файл, только если уже существующий более старой версии, чем новый:

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

Если нужно применить более сложные регулярные выражения, придется комбинировать утилиту cp с find или egrep.

В случае если важно сохранить права доступа к файлу и его владельца нужно использовать опцию -p:

Читайте также:  Объемный рабочий стол windows

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

Будет создан файл с таким же именем и расширением .bak

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

КОПИРОВАНИЕ ФАЙЛОВ ПО РЕГУЛЯРНЫМ ВЫРАЖЕНИЯМ В LINUX

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

find . -name 1 -exec cp <>

Здесь точка указывает на текущую директорию, а параметр name задает регулярное выражение. Параметром exec мы задаем какую команду нужно выполнить для обнаруженных файлов. Символ <> — подставляет имя каждого файла.

Но не find’ом единым можно такое делать. То же самое можно получить, запросив список файлов директории в ls, отфильтровав его по регулярному выражению egrep и передав имена файлов по очереди в cp с помощью xargs:

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

Это достаточно неудобный способ копировать файлы linux но все же, он возможен. Будут скопированы все файлы из домашней директории, содержащие в имени только английские буквы.

КОПИРОВАНИЕ СОДЕРЖИМОГО ФАЙЛОВ В LINUX

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

cat файл1 > файл2

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

cat файл1 файл2 > файл3

СПЕЦИАЛЬНОЕ КОПИРОВАНИЕ ФАЙЛОВ В LINUX С ПОМОЩЬЮ TAR

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

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

tar cf — /var | ( cd /mnt/var && tar xvf — )

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

Источник

Найти и скопировать один самый новый файл

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

Пока ничего умнее не придумал: find /место/искомого/файла -type f -cmin -10 | xargs cp -tpv /мой/каталог/

Но эт нифига не то что хотелось бы. Гуглил, не помогло особо.

я хотел бы что бы время от времени, по моему запросу, из этого каталога копировать самый новый файл(один) в свой личный каталог.

На уроки ходи, неуч!

Если на коленке и без каталогов, то ls -t|head -n 1 покажет самый новый файл.

Ох уже эти советчики со звездами.

Читайте также:  Linux parted boot flag

ТС, НИКОГДА не используй ls, если вывод нужно использовать где-то еще. ls предназначен не для этого.

Чтобы получить самый новый файл используй скрипт

я конечно новичок, но не на столько же))

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

Если пошагово делать — понятнее становится.

Что делать пошагово? Пайп не терминал.

Смотреть результат каждой команды.

Запихни имя в переменную и используй.

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

Лечи голову, лечи голову:

Я не умею смотреть pipe, это разве что через strace.

А результат ls (во всяком случае GNU) меняется от того, куда направлен вывод, в доке про это написано.

Вывод $ ls -t > /tmp/tmpfile && cat /tmp/tmpfile
в общем случае совпадёт с выводом $ ls -t

Я не умею смотреть pipe, это разве что через strace.

Мы о разном. Но тебе виднее.

-1 list one file per line. Avoid ‘\n’ with -q or -b

Источник

Linux копировать найденный файлы

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

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

Команда CP

Здесь все просто есть команда cp , параметры и аргументы, если кратко:

Понятно, что ряд файлов копируется в папку с именем «Destination».

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

Так как каталог содержит файлы, то нужно использовать рекурсивное копирование:

Копирование с заменой / без замены

Достаточно пустить через пайп:

Или через force :

Без замены (предотвратить замену) можно использовать параметр -n :

Копирование определенного типа файлов

Достаточно выбрать файлы по расширению:

Можно во всех случаях использовать verbose :

Все доступные команды доступны в мане, основных параметров не так много, можно достаточно быстро изучить:

  • cp -a archive files
  • cp -f force copy by removing the destination file if needed
  • cp -i interactive — ask before overwrite
  • cp -l link files instead of copy
  • cp -L follow symbolic links
  • cp -n no file overwrite
  • cp -R recursive copy (including hidden files)
  • cp -u update — copy when source is newer than dest
  • cp -v verbose — print informative messages

Но вопросы про разрешения и исключение файлов остаются открытыми, здесь придет на помощь rsync.

Копировать каталоги за исключением

Каждое исключение — отдельный параметр, например так:

Копировать каталоги сохранив разрешения

Здесь все просто, достаточно добавить параметр -p :

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

Копирование с использованием FIND

Можно найти нужные файлы и скопировать их «куда надо»:

Поиск и копирование старых файлов

Например сроком жизни более месяца:

Памятка по Find

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

Но в целом подходит конструкция указанная выше:

Источник

Как копировать файлы и каталоги в Linux

Копирование файлов и каталогов — одна из наиболее распространенных задач, которые вы будете выполнять при работе в командной строке. В Linux есть несколько команд для копирования файлов, наиболее широко используемые инструменты — cp и rsync .

Обычной практикой является использование команды cp для копирования файлов и rsync для копирования каталогов.

Читайте также:  Загрузочное меню windows клавиша

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

Копирование файлов с помощью команды cp

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

Самый простой вариант использования — скопировать файл в текущий рабочий каталог. Например, чтобы скопировать файл с именем file.txt в файл с именем file_backup.txt в текущем каталоге , вы должны выполнить следующую команду:

Если целевой файл существует, он будет перезаписан. Чтобы получить запрос на подтверждение перед перезаписью файлов, используйте параметр -i .

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

Другой вариант, который может быть полезен, — это -v . При использовании этой опции команда печатает, что делается:

Скопируйте файл в каталог

Чтобы скопировать файл в каталог, укажите абсолютный или относительный путь к каталогу. Если целевой каталог не указан, файл копируется в текущий каталог.

В следующем примере мы file.txt файл file.txt в file.txt /backup :

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

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

Приведенная выше команда скопирует файл в указанный каталог как new_file.txt .

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

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

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

Команда cp также позволяет использовать сопоставление с образцом. Например, чтобы скопировать все файлы .png из текущего каталога в каталог /backup , вы должны использовать:

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

Чтобы скопировать каталог, включая все его файлы и подкаталоги, используйте параметр -R или -r . В следующем примере мы копируем каталог Pictures в Pictures_backup :

Приведенная выше команда создаст каталог назначения и рекурсивно скопирует все файлы и подкаталоги из источника в каталог назначения.

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

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

Копирование файлов и каталогов с помощью команды rsync

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

rsync включает множество параметров, которые контролируют каждый аспект его поведения.

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

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

Если целевой файл существует, rsync перезапишет его.

Эту же команду можно использовать для копирования каталога:

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

Чтобы узнать больше о rsync прочтите следующие статьи:

Выводы

Мы показали вам, как копировать файлы и каталоги в системах на базе Linux и Unix, используя утилиты cp и rsync .

Если у вас есть вопросы, оставьте комментарий ниже.

Источник

Оцените статью