Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: терминал find найти среди файлов с заданным разрешением с одинаковыми именами.  (Прочитано 60605 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн FindTo

  • Автор темы
  • Новичок
  • *
  • Сообщений: 13
  • Эти ваши не понимать
    • Просмотр профиля
терминал find найти среди файлов с заданным разрешением с одинаковыми именами.


есть папка медиа(/home/media) с кучей аудиофайлов(mp3/ogg/aac), задача - найти все файлы с расширением ТОЛЬКО *.mp3 в этой папке и её подпапках с одинаковыми именами.

Найденный в интернете вариант
find "/home/media" -type f -printf "%f\n" -iname "*.mp3" | sort -f
не работает. Выдаёт все расширения файлов, а не только  *.mp3

важно - это может быть любая встроенная команда, ls find или ещё чего, но не скрипт или стороннее/загружаемое по.

эта тема
https://forum.ubuntu.ru/index.php?topic=44246.0&ysclid=lcmarqii35906062320
прочитана, там нет полного ответа конкретно на мой вопрос
Неофит извращений чёрных экранов.

Оффлайн qpdb

  • Забанен
  • Активист
  • *
  • Сообщений: 628
  • xUbuntu 22.04
    • Просмотр профиля
Можно попробовать безопасно скопировать всю эту музыку или что там, просто к копиям будет добавлен уникальный префикс…
QQ=(/tmp/$(date +%H%M%S)_cp);mkdir $QQ;find . -type f -iname "*.mp3" -exec bash \
-c 'cp "$0" "`echo $0|sed -r "s:(.*)/:\1/$(date +%s%4N)∑¢∑_:;s:(.*)/.{8}:\1\/:"`"' \
{} \; 2>/dev/null;sleep 5;find . -type f -iname "*∑¢∑*" -exec mv -t $QQ  {} \; 2>/dev/null
—▶В /tmp создаётся директория (можно в любом другом месте)…
—▶Далее во всех директория и поддиректориях искомой директории создаются копии файлов .mp3 которые начинаются  приблизительно 239705∑¢∑_black…and…black.mp3; ∑¢∑ это просто что-то чего точно не будет в именах родных файлов, цифры у всех префиксов будут разные. Обычно для уникальности хватает шести.
—▶Потом эти файлы по признаку ∑¢∑ будут перемещены в созданную в /tmp директорию.

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

2023 Jan 09; 08:45 AM

Оффлайн F12

  • Администратор
  • Старожил
  • *
  • Сообщений: 4717
    • Просмотр профиля
findTo, ты пробовал вникнуть в то, что делает Найденный в интернете вариант?..

- я бы, например, искал файлы с заданным разрешением просто командой find /home/media -name "*.mp3" -type f -print- а вот с заданным разрешением и с одинаковыми именами так find /home/media -name "*.mp3" -type f -printf '%f\n' | sort | uniq -d | xargs -i find * -type f -name {} 2>/dev/null      ... по-моему чуть чуть попроще, чем предложил qpdb

Оффлайн qpdb

  • Забанен
  • Активист
  • *
  • Сообщений: 628
  • xUbuntu 22.04
    • Просмотр профиля
по-моему чуть чуть попроще, чем предложил qpdb
Не просто проще😇, а безусловно проще😇!!! Я исходил из того, что с файлами потом ещё и что делать нужно будет… Так сказать взгляд в  туманное будущее😇…
2023 Jan 09; 10:04 AM

Оффлайн FindTo

  • Автор темы
  • Новичок
  • *
  • Сообщений: 13
  • Эти ваши не понимать
    • Просмотр профиля
findTo, ты пробовал вникнуть в то, что делает Найденный в интернете вариант?..

- я бы, например, искал файлы с заданным разрешением просто командой find /home/media -name "*.mp3" -type f -print- а вот с заданным разрешением и с одинаковыми именами так find /home/media -name "*.mp3" -type f -printf '%f\n' | sort | uniq -d | xargs -i find * -type f -name {} 2>/dev/null      ... по-моему чуть чуть попроще, чем предложил qpdb

нет выхлопа.





по-моему чуть чуть попроще, чем предложил qpdb
Не просто проще😇, а безусловно проще😇!!! Я исходил из того, что с файлами потом ещё и что делать нужно будет… Так сказать взгляд в  туманное будущее😇…
2023 Jan 09; 10:04 AM



А с самими файлами ничего не будет, будет с копиями. Но файлы надо посчитать wc -l и вывести число



#! /bin/bash

rassh=mp3

papka="/home/media"

poisk=$(find "$papka" -type f -iname "*.$rassh" | wc -l)

dubli=$(find "$papka" -type f -printf "%f\n" -iname "*.$rassh" | sort -f | uniq -i -d | wc -l)

dublisp=$(find "$papka" -type f -printf "%f\n" -iname "*.$rassh" | sort -f | uniq -i -d)


echo "
папка
${papka}

содержит ${poisk} файлов с расширением ${rassh}

из них с одинаковыми именами ${dubli}

список файлов с одинаковыми именами и расширением ${rassh} :
${dublisp}
"


и всё бы хорошо, но эти не работают(выводят все расширения вместо только одного)
(Нажмите, чтобы показать/скрыть)

« Последнее редактирование: 09 Января 2023, 19:40:19 от FindTo »
Неофит извращений чёрных экранов.

Оффлайн qpdb

  • Забанен
  • Активист
  • *
  • Сообщений: 628
  • xUbuntu 22.04
    • Просмотр профиля
FindTo, на всякий случай могу сказать, что команда sort с кириллицей работает некорректно😞, если вообще можно сказать что работает😞…

Из-за этого могут быть проблемы…

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

Это поможет коллективу усилить „мозговой штурм😇“!

Примитивно, но с высокой точностью результата общее количество .mp3 можно посмотреть:
find . -type f -iname "*.mp3" | nl | tail -3
2023 Jan 09; 01:28 PM




Оффлайн FindTo

  • Автор темы
  • Новичок
  • *
  • Сообщений: 13
  • Эти ваши не понимать
    • Просмотр профиля
find /home/media -name "*.mp3" -type f -printf '%f\n' | sort | uniq -d | xargs -i find * -type f -name {} 2>/dev/null
надо было второй раз прописать папку:

find /home/media -name "*.mp3" -type f -printf '%f\n' | sort | uniq -d | xargs -i find /home/media -type f -name {} 2>/dev/null

скрипт получается такой:
#! /bin/bash

rassh=mp3

papka="/home/media"

poisk=$(find "$papka" -type f -iname "*.$rassh" | wc -l)

dubli=$(find $papka -name "*.$rassh" -type f -printf '%f\n' | sort | uniq -d | xargs -i find $papka -type f -name {} 2>/dev/null | wc -l)

dublisp=$(find $papka -name "*.$rassh" -type f -printf '%f\n' | sort | uniq -d | xargs -i find $papka -type f -name {} 2>/dev/null)


echo "
папка
${papka}

содержит ${poisk} файлов с расширением ${rassh}

из них с одинаковыми именами ${dubli}

список файлов с одинаковыми именами и расширением ${rassh} :
${dublisp}
"

есть только один маленький облом, когда дубликаты или файлы отсутствуют.

Прошу погонять скрипт/команды на разных папках, если косяки не вылезут завтра ставлю "решено"

всем спасибо.

Но я еще вернусь, есть еще проблемка. Другая тема будет  :coolsmiley:
« Последнее редактирование: 10 Января 2023, 01:10:18 от FindTo »
Неофит извращений чёрных экранов.

Оффлайн F12

  • Администратор
  • Старожил
  • *
  • Сообщений: 4717
    • Просмотр профиля
надо было второй раз прописать папку
- именно так!
   ... теперь вижу, действительно пытаешься вникнуть  ;)

Оффлайн qpdb

  • Забанен
  • Активист
  • *
  • Сообщений: 628
  • xUbuntu 22.04
    • Просмотр профиля
Скрипт рабочий, я правда проверял на файлах с другим расширением, ну я думаю это непринципиально.

А вот с sort и кириллицей вроде всё нормально :idiot2:, просто давно не пробовал, наверное моё мнение было ошибочным, может в новых версиях всё исправили или дополнили…

(Нажмите, чтобы показать/скрыть)

2023 Jan 09; 07:25 PM

Оффлайн FindTo

  • Автор темы
  • Новичок
  • *
  • Сообщений: 13
  • Эти ваши не понимать
    • Просмотр профиля
пустоту замаскировать не получается  >:(
вот эта строка
dublisp=$(find "$papka" -type f -printf "%f\n" -iname "*.$rassh" | sort -f | uniq -i -d)

в скрипте выдаёт эту инфу
Цитировать
список файлов с одинаковыми именами и расширением ${rassh} :
${dublisp}

если файла с расширением rassh не существует, или если одноимённых файлов не найдено, как добавить вывод текста "не найдено"

???



нашёл такой вариант
dublisp=$(find $papka -iname "*.$rassh" -type f -printf '%f\n' | sort | uniq -d | xargs -i find $papka -type f -iname {} | grep \/ || echo "нима!")
корректно ли пихать echo в echo?
« Последнее редактирование: 10 Января 2023, 12:56:46 от FindTo »
Неофит извращений чёрных экранов.

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6995
  • Luck Tales
    • Просмотр профиля
Проще присвоить значение по умолчанию.
список файлов с одинаковыми именами и расширением ${rassh:-0} :Если $rassh пустая, Выведет 0
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

 

Страница сгенерирована за 0.059 секунд. Запросов: 23.