Linux находит и копирует файлы
Обновлено: 24.11.2024
В Linux команда ‘cp’, стандартная для ‘Копировать’, используется для копирования файлов и папок в другую папку. Он доступен по умолчанию в Linux как часть набора инструментов GNU Coreutils.
Самое простое использование команды cp — указать файлы, которые нужно скопировать, в качестве аргументов и указать целевую папку в качестве последнего аргумента.
Копировать файлы с определенными расширениями
Вы даже можете копировать файлы с одинаковыми расширениями (например, .txt , .jpg , .mp4 ) вместе, используя подстановочные знаки, как показано ниже:
При этом все изображения JPEG, мультимедийные файлы MP3 и MP4 будут скопированы в папку «media». Обратите внимание, что это можно использовать только для файлов. Если вы попытаетесь скопировать папки в указанном выше формате, появится предупреждение о том, что папка не пуста.
Чтобы копировать папки, мы должны указать флаг '-r' (рекурсивный). Рекурсивный означает, что все файлы в этой папке, файлы во вложенных папках и т. д. будут скопированы.
Однако в cp нет возможности рекурсивно копировать файлы с определенным расширением. Всякий раз, когда указан '-r', программа всегда рассматривает все файлы в подпапках для копирования.
Найти и скопировать файлы с расширением файла
Для этого мы используем команду find, которая просто используется для поиска файлов и папок в Linux на основе параметров файла или папки: имени файла, расширения, размера и т. д.
Мы воспользуемся командой find для рекурсивного поиска файлов с определенным расширением, а затем передадим эти выходные данные команде cp для их копирования.
Синтаксис для поиска файлов с определенным расширением с помощью команды find:
Например, чтобы рекурсивно найти все файлы JPG в текущей папке:
Поиск файлов по расширению файла
Наконец, мы должны передать этот вывод команде cp. Для этого мы используем команду «xargs», чтобы заставить «cp» рассматривать вывод «find» в качестве аргументов. Кроме того, мы используем флаг '-t' команды cp для указания целевого каталога, без которого программа считает вывод 'find' целевым каталогом.
Рекурсивное копирование файлов с расширением файла
Таким образом, все файлы с расширением «.jpg» были скопированы в папку «Pictures2».
Заключение
В этой статье мы узнали, как рекурсивно копировать файлы с определенным расширением в Linux. Обратите внимание, что этот метод полезен, если вы имеете дело с меньшим количеством файлов. Для огромного количества файлов (например, десятков тысяч) необходимо использовать другой подход для рекурсивного копирования файлов.
Если у вас есть какие-либо вопросы или отзывы, сообщите нам об этом в комментариях ниже.
Часто задаваемые вопросы по поиску/копированию в Linux: как использовать команду find, чтобы найти много файлов и скопировать их все в каталог?
Сегодня утром я столкнулся с ситуацией, когда мне нужно было использовать команду find Linux, чтобы (а) найти все файлы MP3 в моем текущем каталоге и (б) скопировать их в другой каталог. В этом случае я не хотел использовать команду cp -r или команду tar для сохранения структуры каталогов; вместо этого я хотел, чтобы все файлы оказались в одном каталоге (чтобы я мог легко импортировать их в iTunes).
Вкратце, вот команда find, которую я использовал, чтобы найти и скопировать все эти файлы:
Если вы знакомы с командой find и ранее использовали параметр -exec, единственное, что сложно в этой команде, — это знать, где поставить фигурные скобки и символ \; в команде.
- В этом примере все файлы MP3 в текущем каталоге копируются в целевой каталог (/tmp/MusicFiles). Опять же, это не команда cp -r; все эти файлы окажутся в одной папке.
- В результате при наличии повторяющихся имен файлов некоторые файлы будут потеряны.
- Если вы не хотите перезаписывать существующие файлы, используйте команду cp -n, например:
Опция -n команды cp означает "без затирания", и вы также можете ввести ее как cp --no-clobber в некоторых системах, таких как Linux. (Опция -n работает в системах MacOS, а --no-clobber — нет.) Обязательно протестируйте эту команду, прежде чем использовать ее на чем-то важном; Я еще не проверял это, я только что прочитал справочную страницу для команды cp.)
Если вам когда-нибудь понадобится использовать команду find в Linux, чтобы найти большой набор файлов и скопировать их в другое место, я надеюсь, что это было полезно.
Другой пример: найти и переместить
Вот еще один пример команды «найти и скопировать», которую я только что использовал, хотя в данном случае это была команда «найти и переместить». В этом случае у меня была куча файлов (с уникальными именами) в подкаталогах, и я использовал эту команду, чтобы скопировать их все в текущий каталог:
Как и прежде, это опасная команда, поэтому будьте осторожны. С помощью этой команды, если у вас есть повторяющиеся имена файлов, вы обязательно потеряете данные во время операций перемещения.
Это руководство покажет вам, как копировать файлы и каталоги в Linux, выполняя команды из командной строки. Кроме того, перечисленные ниже команды подробно описывают, как создавать общесистемные резервные копии или отфильтровывать и копировать только определенные файлы.
Примечание. Эти команды Linux можно запускать только из окна терминала. Если ваша версия Linux загружается с графическим интерфейсом рабочего стола, запустите окно терминала, нажав CTRL-ALT-F2 или CTRL-ALT-T.
Использование команды cp для копирования файлов и каталогов в Linux
Команда cp — это основной метод копирования файлов и каталогов в Linux. Практически все дистрибутивы Linux могут использовать cp. Основной формат команды:
Эта команда Linux создает копию файла my_file.txt и переименовывает новый файл в my_file2.txt.
По умолчанию команда cp запускается в том же каталоге, в котором вы работаете. Однако один и тот же файл не может существовать дважды в одном и том же каталоге. Вам нужно будет изменить имя целевого файла, чтобы скопировать его в то же место. Некоторые пользователи добавят _old, некоторые добавят число, а некоторые даже изменят трехбуквенное расширение (например, .bak вместо .txt).
Возможно, вы не получите предупреждение до того, как Linux перезапишет ваш файл — будьте осторожны или см. ниже параметр –i.
Дополнительные параметры
В сочетании с командой cp можно использовать дополнительные параметры:
- –v verbose: показывает ход выполнения нескольких скопированных файлов
- –ppreserve: сохраняет те же атрибуты, такие как дата создания и права доступа к файлам.
- –f force: принудительно скопировать, предварительно удалив существующий файл
- –i интерактивный: запрашивает подтверждение, настоятельно рекомендуется
- –Рекурсивный: копирование всех файлов и подпапок в каталоге
- –u update: копировать, только если источник новее, чем место назначения
Примечание. Параметр -p (сохранить) заставляет систему сохранять следующие атрибуты исходного файла: время модификации, время доступа, идентификатор пользователя (UID), идентификатор группы (GID), флаги файла, режим файла, списки управления доступом. (ACL) и расширенные атрибуты (EA).
Как скопировать файл в другой каталог в Linux
Чтобы скопировать файл из каталога, в котором вы работаете, в другое место, используйте команду:
Вам не нужно переименовывать файл, если в целевом каталоге уже нет файла с таким же именем.
Чтобы указать путь к исходному файлу:
Это позволяет копировать без изменения каталогов. Команда cp создаст каталог /new_directory, если он не существует.
Чтобы переименовать и скопировать файл по другому пути:
Этот параметр полезен для создания резервных копий файлов конфигурации или для копирования данных на устройство хранения.
Примечание. Узнайте, как перемещать каталоги в Linux.
Копировать несколько файлов из одного каталога в другой в Linux
Возможно, вам потребуется скопировать более одного файла за раз.
Перечислите все файлы, которые нужно скопировать, перед целевым каталогом:
В этом примере создаются копии всех трех файлов в папке /new_directory.
Используйте подстановочный знак, чтобы указать все файлы, которые имеют общую строку символов:
Это позволит найти все файлы с расширением .jpg в каталоге /pictures и скопировать их в папку /new_directory.
Чтобы скопировать всю папку, ее вложенные папки и файлы, используйте параметр –R:
–R означает рекурсивный, что означает «все в этом месте». Это скопирует все файлы, а также все каталоги в папку /new_directory.
Копировать с помощью команды rsync
Команда rsync в Linux используется для синхронизации или передачи данных между двумя местоположениями. Использование похоже на cp , но следует отметить несколько ключевых отличий.
Чтобы скопировать один файл, введите в терминал следующее:
- Опция –a означает все и включена в команды rsync — это сохраняет подкаталоги, символические ссылки и другие метаданные.
- Замените файл my_file.txt в рабочем каталоге.
- Замените /new_directory/ на место назначения.
- Использование my_file_backup.txt в качестве цели указывает, что файл будет переименован во время копирования.
Чтобы скопировать каталог с помощью rsync, введите следующее:
При этом содержимое каталога /etc/docker/ копируется в /home/backup/docker/. Обязательно сохраняйте косые черты. Если не указывать косую черту в исходном каталоге, содержимое будет скопировано в подкаталог.
Чтобы избежать копирования файлов, ознакомьтесь с нашим руководством о том, как исключить файлы и каталоги при передаче данных с помощью команды rsync.
Другие параметры
Команда ls является удобным партнером команды cp в Linux.
Чтобы просмотреть содержимое каталога, введите команду:
В приведенном выше примере отображаются все файлы в каталоге /. Используйте эту команду после копирования, чтобы убедиться, что файлы были скопированы успешно.
Чтобы изменить каталог, используйте cd и имя каталога. Например:
Командная строка изменится, чтобы показать, что вы изменили каталоги.
Теперь вы понимаете, как копировать файлы в Linux. Команда cp — это универсальный и мощный инструмент для управления файлами и их резервного копирования.
Invicti Web Application Security Scanner — единственное решение, обеспечивающее автоматическую проверку уязвимостей с помощью Proof-Based Scanning™.
Наша аудитория поддерживает Geekflare. Мы можем получать партнерские комиссионные за покупку ссылок на этом сайте.
Обеспечьте безопасность приложений правильно! Обнаружение, защита, мониторинг, ускорение и многое другое…
Команда find в Linux — это мощный инструмент, который позволяет системным администраторам находить файлы и каталоги и управлять ими на основе широкого диапазона критериев поиска. Он может находить каталоги и файлы по имени, типу или расширению, размеру, разрешениям и т. д.
Помимо поиска файлов и каталогов, сочетание команды find с другими командами позволяет выполнять действия с результатами. Добавление параметра -exec позволяет системным администраторам запускать внешние команды и выполнять такие действия, как копирование, перемещение, удаление или изменение разрешений для файлов, соответствующих заданным критериям, таким как размер, имя и т. д.
В этой статье мы начнем с объяснения основных команд Linux на примерах. Это покажет вам, как найти файлы и каталоги. Затем мы покажем вам, как использовать параметр -exec для работы с файлами или каталогами в зависимости от их размера, разрешений и т. д.
Общий синтаксис команды find:
- путь указывает каталог.
- имя файла или каталога для поиска: имя файла или каталога для поиска
- требуемое действие: например, копирование, удаление, перемещение и т. д.
В этом руководстве мы объясним, как найти файлы и каталоги, соответствующие указанным шаблонам. Мы также увидим, как выполнять действия с файлами или каталогами, которые находит команда find. Руководство основано на Ubuntu, но применимо к большинству дистрибутивов и версий Linux.
Найти файлы и каталоги
Поиск определенных файлов по имени или расширению
Чтобы найти определенный файл, выполните следующую команду из корня (/). Команда содержит точное имя файла, который вы ищете.
Обратите внимание, что результаты включают путь. Это важно, если вы не знаете каталог, в котором находится файл, или если он находится более чем в одном месте.
Вы также можете искать файл в другом каталоге, оставаясь в текущем местоположении. В этом случае вам необходимо указать путь к каталогу, в котором вы хотите выполнить поиск.
Поиск определенных файлов в другом каталоге
В нашем случае мы будем искать все файлы, начинающиеся с букв file в тестовом каталоге.
Поиск файлов по расширению
Чтобы найти файл в Linux с определенным расширением, добавьте его в команду.
Поиск файлов и каталогов по имени
Используйте приведенную ниже команду для поиска файлов и каталогов, начинающихся с букв qa . На нашем компьютере есть файлы qatree.txt и qa.txt, а также каталог с именем qa .
Если мы запустим команду;
Он возвращает следующий вывод
Команда возвращает файлы и каталоги, соответствующие критериям поиска. Чтобы найти только файлы или каталоги, вам нужно указать это в команде.
Найти только файлы или каталоги
Только для файлов используйте переключатель типа f.
Только файлы
Только каталоги
Добавьте параметр типа d для поиска только каталогов.
Команда поиска без учета регистра
Все поисковые запросы с ключом -name чувствительны к регистру и не будут давать результаты с заглавными буквами.Чтобы получить все случаи, используйте параметр -iname.
Поиск файла в нескольких каталогах
Чтобы найти файлы в разных каталогах, добавьте их пути в команду. В нашем случае мы проверим тестовые и числовые каталоги.
Найти несколько файлов с разными расширениями во всех каталогах
Команду find можно использовать для поиска нескольких файлов с разными расширениями, такими как *.doc , *.txt *.pdf и т. д. Это можно сделать отдельно, по одному расширению за раз или с помощью одной команды. который включает все нужные расширения.
найти . -type f ( -name "*.txt" -o -name "*.pdf" -o -name "*.doc" )
Найти файлы, содержащие определенный текст
Иногда вы хотите получить доступ к файлу, содержащему определенный текст, но не можете вспомнить его имя или местоположение. Эта команда позволяет найти все файлы, содержащие целевой текст.
Чтобы найти все файлы, содержащие слово «гиперконвергенция», используйте;
Параметр –i позволяет команде игнорировать регистры и находит текст независимо от того, пишется он с заглавной буквы или нет, т. е. гиперконвергенция, гиперконвергенция и т. д.
Чтобы искать файлы в определенном каталоге, просто добавьте их в команду
Поиск файлов и каталогов по размеру
Вы можете найти все файлы или каталоги, которые меньше, равны или больше определенного размера, в пределах определенного диапазона или пусты. Используйте подходящий формат размера в зависимости от типа файлов или каталогов, которые вы ищете.
Параметры размера включают;
Найти файлы определенного размера — равного 30 МБ
Чтобы выполнить поиск, найдите все файлы размером 30 МБ
Найти файлы больше указанного размера
Найти файлы размером менее 10 МБ в текущем каталоге
Найти файлы размером от 100 до 200 МБ
При поиске файлов в пределах определенного диапазона, например от 100 до 200 МБ
Ищите каталоги размером более 20 КБ
найти / -type d -size +20k
Найти пустые файлы и каталоги.
Файлы
найти ./ -тип f -размер 0
Каталоги
Поиск файлов по возрасту или времени модификации
Найти файлы старше n дней
-mtime +8 будет искать текстовые файлы старше 8 дней.
По дате изменения
Это будет искать файлы, измененные в течение последних 17 часов
Ищет каталоги, измененные за последние 10 дней
Поиск файлов на основе доступа или модификации
Поиск файлов по дате или времени доступа. Это позволяет вам видеть файлы, которые были или не были доступны в течение указанного периода.
Чтобы просмотреть файлы, к которым не обращались в течение последних 10 дней в домашнем каталоге.
Файлы были доступны ровно 10 дней назад
Использовано в течение последних 10 дней
Найти файлы, измененные за последние n дней
Вы также можете найти файлы в каталоге /home, измененные за последние 10 дней, с помощью команды;
Найти файлы, измененные за определенный период.
Например, все файлы, измененные от 6 до 15 дней назад в домашнем каталоге.
Файлы и каталоги, к которым обращались за последние 10 минут
Чтобы найти файлы, к которым обращались за последние 10 минут, используйте параметр -amin.
Каталоги, к которым обращались за последние 10 минут
Найти файлы, соответствующие определенным разрешениям
Где режим — это разрешение, которое может быть числовым, например 644, 655, 700, 777 и т. д., или буквами, например u=x, a=r+x и т. д.
Вы можете указать режим тремя способами.
- Без префикса, если вы хотите найти файлы с точно указанными разрешениями.
- С "-" для файлов с указанными разрешениями. Это возвращает файлы с указанными, а также дополнительными более высокими разрешениями.
- Использование «/» требует указания владельца или группы с разрешением на доступ к файлу.
Найти файлы с разрешением 777
Найти файлы с размером не менее 766
find -perm -766
Команда ищет все файлы, в которых
- Владелец файла имеет права на чтение/запись/выполнение.
- У группы есть права на чтение/запись
- Другие имеют разрешение на чтение и запись
Поэтому он возвращает два файла, соответствующих этому критерию — файл1 и файл2. Файлы не обязательно должны иметь точные разрешения 766 и могут иметь дополнительные разрешения такой же длины, но должны иметь как минимум указанные.
Найти файлы, доступные для записи владельцу
Теперь мы будем использовать «/» для поиска файлов, доступных для записи либо их владельцу, либо группе, либо другим лицам.
Приведенный выше способ ищет файлы, которые доступны для записи либо их владельцу, либо группе.
Это возвращает файлы, которые доступны для записи одним из них, но не обязательно обоими. Чтобы увидеть файлы, для которых оба имеют права на запись, используйте префикс –.
Найти файлы, принадлежащие пользователю
Найти все файлы, принадлежащие Джеку
Найти определенные файлы, принадлежащие пользователю
Найти все текстовые файлы, принадлежащие Джеку
Найти и просмотреть файлы и каталоги вместе с их разрешениями
Найти результаты и действовать в соответствии с ними
В этом разделе мы рассмотрим, как вы можете действовать с файлами, которые соответствуют шаблону, указанному в команде find.
Найти файлы и изменить разрешения
Найти и изменить разрешения для определенных типов файлов. В нашем случае мы будем работать с файлами PHP с разными разрешениями, как показано ниже.
Теперь мы найдем все файлы PHP (выше) и заменим их разрешения на 755
Команда ищет файлы PHP в каталоге ver, а затем устанавливает для них разрешение 755 ( rwxr-xr-x )
Поиск и изменение прав доступа к файлам и каталогам
Найти файлы с разрешениями 644 и изменить их на разрешения 655
Вы также можете найти каталоги с разрешениями 644 и заменить их на 755.
Папка docs имеет права доступа 644
Чтобы установить значение 755 , мы запускаем
Теперь мы можем еще раз проверить, что именно 755
Сверху видно, что корневой каталог и каталоги документов имеют права доступа 755.
Команда Ls –la дает следующую информацию
Найти и скопировать файлы или каталоги
Найти и скопировать определенный файл в каталог
Приведенная ниже команда найдет файл file22.tx t и скопирует его в каталог ~/tmp/images.
Найти и скопировать файлы одного типа в каталог
Чтобы найти файлы, такие как изображения с расширением jpg, в текущем каталоге и скопировать их в другое место, например в папку с изображениями, используйте;
Все файлы jpg будут найдены и скопированы в папку ~/tmp/images.
Найти и скопировать один файл во множество каталогов
Найти и скопировать один каталог в несколько.
При этом файл hci будет найден и скопирован в три каталога: /tmp/dir1/, /tmp/dir2/ и $HOME/3/
.Найти и переместить файлы в другой каталог
Чтобы переместить известный файл из каталога в другой. Чтобы переместить файл universal.php;
Поиск и перемещение файлов с определенным расширением в другую папку
Найти определенные файлы и переместить их в другую папку
Команда ищет все файлы с именами, начинающимися с uni и имеющими любое расширение. Затем он перемещает их в каталог /unifiles/
Найти и переместить файлы по возрасту
Найти и переместить файлы старше указанного числа дней в другое место, например в архив.
При этом будут найдены файлы PDF старше 20 дней и перемещены в каталог backup1.
Найти и удалить файлы и каталоги
Синтаксис для поиска и удаления файлов или каталогов в текущем каталоге
найти . -type f -name "файл для удаления" -exec rm -f <> ; удалить только файлы или
найти . -type d -name "каталог для удаления" -exec rm -rf <> ; удалить только каталоги
Найти и удалить только определенные файлы
Чтобы найти и удалить файлы, начинающиеся с til, используйте;
Чтобы найти и удалить каталоги, начинающиеся с til
Удалить и файлы, и каталоги
Это удалит как файлы, так и каталоги, начинающиеся с букв til.
Удалить по расширению
Ниже показано, как найти и удалить все текстовые файлы в текущем каталоге. Замените txt другим расширением, таким как bak , pdf или любым другим, которое вы хотите удалить.
Если вы хотите, чтобы система запрашивала подтверждение перед удалением каждого файла, добавьте параметр -i, как показано ниже.
По умолчанию параметр -rm не удаляет каталоги, и вам необходимо использовать параметр –r, чтобы обеспечить рекурсивное удаление. Это гарантирует удаление пустых каталогов и каталогов, содержащих файлы. Параметр -f вызывает принудительное удаление и используется как для файлов, так и для каталогов.
Найти и удалить файлы старше n дней
Найти и удалить файлы резервных копий старше 20 дней из текущего каталога.
При этом будут удалены все файлы .bak старше 20 дней.
Найти и удалить только каталоги
Чтобы удалить каталог с именем dir22
Убедитесь, что вы соответствуете регистру имени каталога, или используйте параметр -iname.
Удаляет как Dir22, так и dir22
Чтобы подтвердить удаление, используйте параметр -i.
Вывод
rm: удалить каталог ‘./Dir22’? n
rm: удалить каталог ‘./dir22’? г
В нашем случае мы ввели n для каталога Dir22, который не будет удален, и y для каталога dir22, который теперь будет удален.
Найти и удалить пустые файлы
Вы можете использовать любую из следующих команд, чтобы найти пустые файлы и удалить их автоматически.
или
найти ./ -тип f -размер 0 | xargs rm -f
или
find ./ -type f -size 0 – удалить
Найти и удалить пустые каталоги
Для удаления пустых каталогов мы будем использовать параметр d.
Другой альтернативой является использование удаления вместо удаления.
Обратите внимание, что удаление системных или важных файлов с вашего компьютера может повредить операционную систему или приложения или привести к потере важных данных.
Во избежание случайного удаления рекомендуется использовать учетную запись пользователя без полномочий root. Кроме того, убедитесь, что вы удаляете нужные файлы, которые не нужны, и что у вас есть резервная копия всех ваших файлов данных на всякий случай.
Что дальше?
Попробуйте приведенные выше команды поиска Linux в своей лаборатории или НЕПРОИЗВОДСТВЕННОЙ среде. Посмотрите, можете ли вы использовать некоторые из них для автоматизации очистки файловой системы с помощью Crontab. А чтобы освоить Linux, ознакомьтесь с этим онлайн-курсом.
Читайте также: