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


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

Автор Тема: Помогите написать скрипт, который найдет все папки, содержащие только один файл  (Прочитано 1350 раз)

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

Оффлайн 32reg

  • Автор темы
  • Участник
  • *
  • Сообщений: 122
    • Просмотр профиля
    • Linux32.ru
Собственно вопрос в теме. Подскажите, а то я в скриптописательстве не очень...
Набросал вот так:
#!/bin/bash
cd ~/Install
i=find -type d
find $i -type f | wc -l >> ~/Рабочий\ стол/file.txt
но он выводит общее количество файлов в папке Install. А мне нужно по каждой папке отдельно и потом выбрать те папки, в которых только 1 файл
www.linux32.ru - новости и статьи о Linux

andrey_p

  • Гость
#!/bin/sh

# Usage: ./script PATH2DIR

find "$1" -type d | while read d; do
   [ `ls -l "$d"/* 2>/dev/null | wc -l` -eq 1 ] && [ -f "$d"/* ] && echo "$d"
done
« Последнее редактирование: 26 Июля 2011, 13:04:34 от andrey_p »

Оффлайн 32reg

  • Автор темы
  • Участник
  • *
  • Сообщений: 122
    • Просмотр профиля
    • Linux32.ru
andrey_p, спасибо, то что надо.
Не могли бы вы разъяснить мне (для общего развития) по командам и ключам в этом скрипте, что за что отвечает?
www.linux32.ru - новости и статьи о Linux

andrey_p

  • Гость
Ну это же миникурс надо целый написать. Про find, test, exit status, параметры оболочки ...  ??? Без обид, судя по самостоятельно попытке, опыта совсем немного. Так что, чесслово, лучше "начать с начала" - почитать что-нибудь вводное по оболочке.  :)

А алгоритм понятен:

Найти все директории. (find ...)
Для каждого директория ( | while ...)
  проверить что в нем всего одна запись ( [`ls ...])
  и эта запись файл ( && [ -f ...] )
  и (тогда) распечатать этот директорий  (&& [ echo ...])

Оффлайн 32reg

  • Автор темы
  • Участник
  • *
  • Сообщений: 122
    • Просмотр профиля
    • Linux32.ru
Точнее будет опыта совсем нет :)
За краткое разъяснение спасибо. Раз для этого скрипта поверхностных знаний не достаточно, то и заморачиваться с расшифровкой не буду. Тем более что для моей задачи он и так подходит

Пользователь решил продолжить мысль 27 Июля 2011, 14:08:26:
[ -f "$d"/* ]это самостоятельная команда или ключ к другой команде?
« Последнее редактирование: 27 Июля 2011, 14:08:26 от 32reg »
www.linux32.ru - новости и статьи о Linux

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
[ -f "$d"/* ]это самостоятельная команда или ключ к другой команде?

Это команда test
Код эквивалентен
test -f "$d"/*(проверка, является ли файлом "$d"/*)
подробности в man test
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн 32reg

  • Автор темы
  • Участник
  • *
  • Сообщений: 122
    • Просмотр профиля
    • Linux32.ru
www.linux32.ru - новости и статьи о Linux

 

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