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

Переместить файлы в каталоги на основании суффикса («расширения»)

У меня в папке находятся файлы разных расширений. Как можно создать отдельную папку для каждого отдельного расширения (например с названием расширения) и записать туда все файлы этого расширения? Узнать существущие расширения можно с помощью:

find . -type f -name "*.*" | awk -F. '' | sort -u | paste -s -d, 

2 ответа 2

  1. программе find логично было бы передать опцию -maxdepth 1 , чтобы поиск проводился только в текущем каталоге, без вложенных каталогов.
  2. после sort -u у вас уже есть список суффиксов, следующее преобразование paste -s -d, , превращающее список в строку, где суффиксы разделены запятой, излишне.
  3. с этим списком можно, например, с помощью программы xargs, произвести необходимые действия: и каталог создать, и файлы переместить:
xargs -n 1 -I% sh -c 'mkdir -p %; mv *.% %' 
$ touch file file.tar.gz file.tar file.gz $ tree . ├── file ├── file.gz ├── file.tar └── file.tar.gz 0 directories, 4 files $ find . -maxdepth 1 -type f -name "*.*" | awk -F. '' \ | sort -u | xargs -n 1 -I% sh -c 'mkdir -p %; mv *.% %' $ tree . ├── file ├── gz │ ├── file.gz │ └── file.tar.gz └── tar └── file.tar 2 directories, 4 files 

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

$ find . -type f -name "*.*" | while read f; do s="$"; mkdir -p "$s"; mv "$f" "$s"; done 

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

Источник

Поиск и копирование файлов по расширению,

Здравствуйте, такая вот проблема: при переустановке windows на Linux mint не уследил за одним моментом и затер все файлы. Там и фотки маленькой дочки, и фотки со свадьбы короче супруга рвет и мечет как восстановить файлы я вроде разобрался, Восстанавливал с помощью photorec, но он мне нашел 1 000 000 файлов (не только фотки но еще кучу всего), пользоваться стандартным поиском просто не возможно (все безумно виснет). Подскажите, как с помощью терминала найти файлы только .jpg и скопировать их в другую директорию. Заранее благодарю.

Выборка файлов по расширению, упаковка, отправка адресатам, ведение лога, резервное копирование
Всем привет Сделал следующий батник Он ищет в папке файлы aaa0000bbb*.CNG, архивирует их в.

Поиск файлов по расширению
Как из папки и подпапок получить список файлов с расширением "txt", например? Спасибо

Поиск файлов по расширению
Есть переменная "NDisk" в которой хранится имя диска надо создать функцию которая ищет в корне.

Читайте также:  Добавить маршрут альт линукс

Эксперт по компьютерным сетямЭксперт NIX

Лучший ответ

Сообщение было отмечено njog как решение

Решение

find -name "*.jpg" -exec cp '<>' /your/new/folder \;

я правильно понял? <> — означает от куда будет копироваться, а /your/new/folder — куда. и обязателен ли обратный слэш в конце. (большое спасибо за ответ)

Эксперт по компьютерным сетямЭксперт NIX

Лучший ответ

Сообщение было отмечено njog как решение

Решение

ЦитатаСообщение от njog Посмотреть сообщение

. «то, что нашла команда find»
а искать она будет в той папке (и ее подпаках) в которой была запущена команда.
если есть желание указать конкретную папку, в которой искать, то ее нужно вписать сразу после find

find /path/where/to/search -name "*.jpg" -exec cp '<>' /your/new/folder \;

ЦитатаСообщение от njog Посмотреть сообщение

ЦитатаСообщение от njog Посмотреть сообщение

Спасибо, вроде ищет, извините за назойливость, последний вопрос (надеюсь). у меня был один очень важный txt файл, photorec нашел полтора миллиона, подскажите пожалуйста как найти нужный зная его содержимое.

Эксперт по компьютерным сетямЭксперт NIX

grep -i -r "текст, который был в файле" /path/where/to/search/*.txt

Эксперт по компьютерным сетямЭксперт NIX

ЦитатаСообщение от njog Посмотреть сообщение

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

Эксперт по компьютерным сетямЭксперт NIX

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

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

Эксперт по компьютерным сетямЭксперт NIX

ЦитатаСообщение от njog Посмотреть сообщение

=»сферический конь в вакууме».пишите сюда точно — что именно сообщает система, тогда будет видно, какую я там ошибку сделал

ЦитатаСообщение от njog Посмотреть сообщение

ЦитатаСообщение от njog Посмотреть сообщение

я же написал выдает «Нет такого файла или каталога», это когда /*.txt. без txt ищет но результатов не выдает

Эксперт по компьютерным сетямЭксперт NIX

ЦитатаСообщение от njog Посмотреть сообщение

grep -r -i --include="*.txt" "что искать" /папка/где/искать

ЦитатаСообщение от njog Посмотреть сообщение

Спасибо, сейчас буду пробовать

Добавлено через 31 минуту
я вам уже надоел, но не могу не спросить, с помощью find он нашел и скопировал все фотки какие восстановил, но там тоже очень много хлама (всякие логотипы, файлы из интернета, которые даже не качали) в результате файлов в одной папке получилось еще больше 204 000, при открытии папки он так виснет, что даже не отображает (только внизу пишет сколько в ней находится файлов), как можно из папки где на данный момент скопированные все фотки, произвести еще один поиск, только на этот раз по весу файла, например чтобы он искал и копировал фотки, которые не меньше 1Мб.

Читайте также:  Seeing all users in linux

Эксперт по компьютерным сетямЭксперт NIX

Numeric arguments can be specified as +n for greater than n, -n for less than n, n for exactly n. . -size n[cwbkMG] File uses n units of space. The following suffixes can be used: `b' for 512-byte blocks (this is the default if no suffix is used) `c' for bytes `w' for two-byte words `k' for Kilobytes (units of 1024 bytes) `M' for Megabytes (units of 1048576 bytes) `G' for Gigabytes (units of 1073741824 bytes) The size does not count indirect blocks, but it does count blocks in sparse files that are not actually allocated. Bear in mind that the `%k' and `%b' format specifiers of -printf handle sparse files differently. The `b' suffix always denotes 512-byte blocks and never 1 Kilobyte blocks, which is different to the behaviour of -ls.

Вы наверное с помощью photorec искали все файлы. В этой программе можно было задать маску и искать только, к примеру, jpg файлы.

Нет, у меня просто были не только txt и jpg, в смысле выбрал все что нужно Ребят, у меня получается папка, где отсортированны все фотки со значительными размерами (без подкаталогов) общий размер 96 Гб. Сами понимаете открыть такую папку и посмотреть что в ней достатьчно сложно. Как мне с помощью find или другой функции создать в этой папке подкаталоги, и разместить в каждом подкаталоге по 200 фотографий?!

P.S. Маны читал и гуглил, подходящей инфы не нашел, заранее спасибо

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

Поиск файлов по расширению
Как выдрать расширение файлов в рассматриваемой папке и ее подпапках подскажите пожалуйста!! Т.е.

Поиск файлов по расширению в VBA
В YANDEX есть ПОИСК ФАЙЛов по РАСШИРЕНИЮ, а КАК Средствами VBA (СКАЧАТЬ ИНФУ по гиперссылкам из.

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

Источник

Команда find Linux

Изображение баннера

find это мощный инструмент для работы с файлами.

С его помощью можно задавать различные составные условия для дальнейших действий над файлами.

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

В этой статье вы можете познакомится с основами применения find. Про применение find совместно с grep , sed , xargs и другими утилитами вы можете прочитать в статье «Продвинутые методы работы с find»

Поиск

Найти и вывести на экран все файлы в директории

find
find .
find . -print

-name: Поиск по имени

Найти по полному имени в текущей директории

find . -name heihei.log

find . -iname heihei.log

Поиск по расширению

Найти по расширению файла с помощью wildcard *

Ищем в /usr/share/doc все pdf файлы

find /usr/share/doc -name *.pdf

-not: обратное условие

Найти в текущей директории все файлы кроме php

find . -not -name *.php
find . ! -name *.php

Читайте также:  Linux file open dialog

Несколько условий вместе

Найти все файлы, которые начинаются с log но не имеют расширения .txt

find . -name «log*» ! -name *.txt

-o: Логическое или

Найти либо .html либо .php файлы

find . -name *.html -o -name *.php

Найти и скопировать

Найти и сразу скопировать в текущую директорию

find /usr/share/doc -name *.pdf -exec cp <> . \;

Найти в текущей директории

Удалить из текущей директории

find -name *.pdf -delete

Поиск по типу

Чтобы найти только файлы определённого типа выполните find с опцией type.

Например, что найти все ссылки в директории /etc

Подробнее о файлах в Linux читайте в статье «Типы файлов в Linux»

Уровни вложенности

Найти все ссылки только на верхнем уровне вложенности

find /etc -maxdepth 1 -type l

Поиск по размеру файла

Filesystem Size Used Avail Use% Mounted on /dev/sda1 1014M 194M 821M 20% /boot

Найти обычные файлы определённого размера

Чтобы найти обычные файлы нужно использовать -type f

find /boot -size +20000k -type f

find: ‘/boot/efi/EFI/centos’: Permission denied find: ‘/boot/grub2’: Permission denied /boot/initramfs-0-rescue-389ee10be1b38d4281b9720fabd80a37.img /boot/initramfs-3.10.0-1160.el7.x86_64.img /boot/initramfs-3.10.0-1160.2.2.el7.x86_64.img

Файлы бывают следующих типов:

— : regular file
d : directory
c : character device file
b : block device file
s : local socket file
p : named pipe
l : symbolic link

find /boot -size +10000k -type f

find: ‘/boot/efi/EFI/centos’: Permission denied find: ‘/boot/grub2’: Permission denied /boot/initramfs-0-rescue-389ee10be1b38d4281b9720fabd80a37.img /boot/initramfs-3.10.0-1160.el7.x86_64.img /boot/initramfs-3.10.0-1160.el7.x86_64kdump.img /boot/initramfs-3.10.0-1160.2.2.el7.x86_64.img /boot/initramfs-3.10.0-1160.2.2.el7.x86_64kdump.img

То же самое плюс показать размер файлов

find /boot -size +10000k -type f -exec du -h <> \;

find: ‘/boot/efi/EFI/centos’: Permission denied find: ‘/boot/grub2’: Permission denied 60M /boot/initramfs-0-rescue-389ee10be1b38d4281b9720fabd80a37.img 21M /boot/initramfs-3.10.0-1160.el7.x86_64.img 13M /boot/initramfs-3.10.0-1160.el7.x86_64kdump.img 21M /boot/initramfs-3.10.0-1160.2.2.el7.x86_64.img 14M /boot/initramfs-3.10.0-1160.2.2.el7.x86_64kdump.img

Поиск по началу имени файла

Обратите внимание, что в find, в отличие от grep , ставить перед началом названия никаких символов не нужно.

find -name topb*

Поиск по части имени файла

Найти в проекте topbicyle все директории с qa в названии

find topbicycle/ -name *qa* -type d

-perm: поиск по правам доступа

find . -type f -perm 0600
find . -type f ! -perm 0600

-path: поиск путей

Если мне нужно посмотреть содержимое директорий /code/php и /code/python

Пример укороченного результата

-prune: ограничить глубину

С помощью path можно посмотреть содержимое всех поддиректорий code на букву p /code/p*

Если нужно посмотреть только поддиректории верхнего уровня — используется -prune

find . -path «./code/p*» -prune

Получили только поддиректории без их содержимого

Исключить директорию из поиска

Из предыдущего параграфа понятно, что с помощью prune можно исключить директорию из поиска.

Пример: найти в ./code все файлы, заканчивающиеся на index.php но проигнорировать поддиректории на p, то есть в директориях python и php не искать.

find ./code -path «./code/p*» -prune -false -o -name «*index.php»

./code/js/errors/index.php ./code/js/index.php ./code/c/index.php ./code/cpp/index.php ./code/go/pointers/index.php ./code/go/declare_variable/index.php ./code/go/constants/index.php ./code/go/index.php ./code/java/index.php ./code/dotnet/index.php ./code/ruby/index.php ./code/theory/index.php ./code/index.php

-false нужен чтобы не выводить проигнорированные директории.

Ещё один способ исключить директорию из поиска

find ./code -name «*.php« -not -path «./code/p*»

Источник

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