- Переместить файлы в каталоги на основании суффикса («расширения»)
- 2 ответа 2
- Поиск и копирование файлов по расширению,
- Решение
- Решение
- Команда find Linux
- Поиск
- -name: Поиск по имени
- Поиск по расширению
- -not: обратное условие
- Несколько условий вместе
- -o: Логическое или
- Найти и скопировать
- Поиск по типу
- Уровни вложенности
- Поиск по размеру файла
- Поиск по началу имени файла
- Поиск по части имени файла
- -perm: поиск по правам доступа
- -path: поиск путей
- -prune: ограничить глубину
- Исключить директорию из поиска
Переместить файлы в каталоги на основании суффикса («расширения»)
У меня в папке находятся файлы разных расширений. Как можно создать отдельную папку для каждого отдельного расширения (например с названием расширения) и записать туда все файлы этого расширения? Узнать существущие расширения можно с помощью:
find . -type f -name "*.*" | awk -F. '' | sort -u | paste -s -d,
2 ответа 2
- программе find логично было бы передать опцию -maxdepth 1 , чтобы поиск проводился только в текущем каталоге, без вложенных каталогов.
- после sort -u у вас уже есть список суффиксов, следующее преобразование paste -s -d, , превращающее список в строку, где суффиксы разделены запятой, излишне.
- с этим списком можно, например, с помощью программы 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" в которой хранится имя диска надо создать функцию которая ищет в корне.
Сообщение было отмечено njog как решение
Решение
find -name "*.jpg" -exec cp '<>' /your/new/folder \;
я правильно понял? <> — означает от куда будет копироваться, а /your/new/folder — куда. и обязателен ли обратный слэш в конце. (большое спасибо за ответ)
Сообщение было отмечено njog как решение
Решение
Сообщение от njog
. «то, что нашла команда find»
а искать она будет в той папке (и ее подпаках) в которой была запущена команда.
если есть желание указать конкретную папку, в которой искать, то ее нужно вписать сразу после find
find /path/where/to/search -name "*.jpg" -exec cp '<>' /your/new/folder \;
Сообщение от njog
Сообщение от njog
Спасибо, вроде ищет, извините за назойливость, последний вопрос (надеюсь). у меня был один очень важный txt файл, photorec нашел полтора миллиона, подскажите пожалуйста как найти нужный зная его содержимое.
grep -i -r "текст, который был в файле" /path/where/to/search/*.txt
Сообщение от njog
тогда не понимаю, на счет регистра символов у меня все было норм, почему у меня он думал очень долго и ничего не выдал. возможно что этого файла просто не существует.
это обычный «текстовый» поиск.
в этом разделе форума (или в убунте, или в линуксе) какой-то человек выкладывал свой специальный скрипт для поиска. может он поможет (если найдете)
и кстати, если файл в виндузной кодировке, то там русский текст с другой кодовой страницей.
файл виндовый, текст на русском, кстати ваш код выдает ошибку, типа не может найти файл или каталог, дело в том что в папке восстановления есть подкаталоги, может поэтому не хочет. Какой то скрипт я находил, но в комментариях сказали что он велосипед изобрел, уж не знаю на сколько это правда
Сообщение от njog
=»сферический конь в вакууме».пишите сюда точно — что именно сообщает система, тогда будет видно, какую я там ошибку сделал
Сообщение от njog
Сообщение от njog
я же написал выдает «Нет такого файла или каталога», это когда /*.txt. без txt ищет но результатов не выдает
Сообщение от njog
grep -r -i --include="*.txt" "что искать" /папка/где/искать
Сообщение от njog
Спасибо, сейчас буду пробовать
Добавлено через 31 минуту
я вам уже надоел, но не могу не спросить, с помощью find он нашел и скопировал все фотки какие восстановил, но там тоже очень много хлама (всякие логотипы, файлы из интернета, которые даже не качали) в результате файлов в одной папке получилось еще больше 204 000, при открытии папки он так виснет, что даже не отображает (только внизу пишет сколько в ней находится файлов), как можно из папки где на данный момент скопированные все фотки, произвести еще один поиск, только на этот раз по весу файла, например чтобы он искал и копировал фотки, которые не меньше 1Мб.
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‘
Несколько условий вместе
Найти все файлы, которые начинаются с 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*»