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


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: BASH: Как вывести список каталогов? (папок) в скрипте  (Прочитано 16390 раз)

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

Оффлайн owl5053

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
    • OWL5053
Добрый день!
Есть такой скрипт:
rar a -u "/mnt/win_e/backup/foto1" "/mnt/win_d/Pictures/papka1"
rar a -u "/mnt/win_e/backup/foto2" "/mnt/win_d/Pictures/papka2"
rar a -u "/mnt/win_e/backup/foto3" "/mnt/win_d/Pictures/papka3"
......

и т.д. т.е. в папке Pictures сжимаются в отдельные архивы все папки.
Проблема в том, что папок уже очень уж много и постоянно они имеют разные названия.
Можно же как-то оптимизировать?

P.S. FAQ про bash я читал, ссылок не надо
P.P.S. В гугле тоже искал  :D

Оффлайн Tarasov

  • Участник
  • *
  • Сообщений: 150
  • debian lenny
    • Просмотр профиля
for i in `ls /home/images`;    do rar a -u "/mnt/win_e/backup/foto1" "/mnt/win_d/Pictures/$i"; done

как то так
NVIDIA user

Оффлайн owl5053

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
    • OWL5053
for i in `ls /home/images`;    do rar a -u "/mnt/win_e/backup/foto1" "/mnt/win_d/Pictures/$i"; done

как то так

если бы .. но не так  :-\ :(

Оффлайн NT

  • Активист
  • *
  • Сообщений: 595
    • Просмотр профиля
Попробуй примерно такое
find  /где/искать -type d | xargs команда-что-делатьНужно доработать, конечно, но принцип, думаю, понятен.

Оффлайн owl5053

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
    • OWL5053
Попробуй примерно такое
find  /где/искать -type d | xargs команда-что-делатьНужно доработать, конечно, но принцип, думаю, понятен.

не катит!
find  /где/искать -type d начинает рыскать во всех подпапках, а мне всего-то надо вывести список каталогов в заданной папке передав в RAR
Пробывал вариант:
for d in `find /mnt/tst -type d` ;
do
  dd=`basename $d` # формируем хвостик
  echo $dd # печатаем хвостик
done
но и тут косяк! Выводится корневая папка + если есть пробелы в имени папки, к примеру: "Most Wanted", это будут как две разные папки :-(

Оффлайн БТР

  • Заслуженный пользователь
  • Модератор форума
  • Старожил
  • *
  • Сообщений: 5182
    • Просмотр профиля
for i in `ls /mnt/win_d/Pictures/`; do rar a -u "/mnt/win_e/backup/$i.rar" "/mnt/win_d/Pictures/$i"; done

Оффлайн owl5053

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
    • OWL5053
for i in `ls /mnt/win_d/Pictures/`; do rar a -u "/mnt/win_e/backup/$i.rar" "/mnt/win_d/Pictures/$i"; done
нужны ТОЛЬКО КАТАЛОГИ:P

Оффлайн NT

  • Активист
  • *
  • Сообщений: 595
    • Просмотр профиля
начинает рыскать во всех подпапках, а мне всего-то надо вывести список каталогов в заданной папке передав в RAR
Есть опция для глубины поиска.
-maxdepth 1

Маны читать полезно  ;)
« Последнее редактирование: 14 Январь 2011, 19:10:29 от NT »

Оффлайн фирэфохэ

  • Старожил
  • *
  • Сообщений: 2169
  • straightedge
    • Просмотр профиля
У ls есть параметр, который к каталогам добавляет символ "/", потом grep отфильтровываешь, потом с sed удаляешь его если надо. Можно так, можно ещё вариантов придумать много.
http://i18.ЗАПРЕЩЁННЫЙ РЕСУРС/big/2011/0325/6d/19eaa72dd24048a6fb0587832c4b096d.gif КДЕ - УГ. Дебиан - недоось.

Оффлайн owl5053

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
    • OWL5053
У ls есть параметр, который к каталогам добавляет символ "/", потом grep отфильтровываешь, потом с sed удаляешь его если надо. Можно так, можно ещё вариантов придумать много.

пример в студию  :)
я тоже думал, что всё просто ....

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15194
    • Просмотр профиля
    • aetera.net
find /path -maxdepth 1 -type d ...Дальше 1 из 3-х:
... -exec ... \;
... | xargs -i ...
... | while read ; do ... ; done

Оффлайн kit_oz

  • Участник
  • *
  • Сообщений: 122
    • Просмотр профиля
for i in `ls /mnt/win_d/Pictures/`; do rar a -u "/mnt/win_e/backup/$i.rar" "/mnt/win_d/Pictures/$i"; done
почти..
for dir in `ls -F1 /mnt/win_d/Pictures/ | grep -e ./ | tr -d \/`
do rar a -u "/mnt/win_e/backup/$dir.rar" "/mnt/win_d/Pictures/$dir"
done
« Последнее редактирование: 14 Январь 2011, 20:56:31 от kit_oz »
молчание не всегда доказывает присутствие ума, но доказывает отсутствие глупости

Оффлайн owl5053

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
    • OWL5053
for dir in `ls -F1 /mnt/win_d/Pictures/ | grep -e ./ | tr -d \/`
do rar a -u "/mnt/win_e/backup/$dir.rar" "/mnt/win_d/Pictures/$dir"
done
[/quote]

Вроде всё работает, но есть один БАГ! Если название папки будет с пробелами, то будут косяки  :-\ :-[
Как с этим справиться?

Оффлайн NT

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

Оффлайн owl5053

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

:-) НЕ КАТИТ! :-) Не хочу я ручками 100-200 каталогов переименовывать! Да и не могу! Их создает отдельная программа!
А если в скрипте, то скрипт в студию!

 

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