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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Скрипт на bash, для удаления директорий  (Прочитано 4249 раз)

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

Оффлайн Martin_Eden

  • Автор темы
  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Господа программисты, помогите пожалуйста с лабораторной работой.
Задание: Удалить указанные в командной строке каталоги (возможно, с подкаталогами), не используя опцию -r (рекурсивно) команды rm, и вывести на стандартный вывод протокол выполненных действий.
На баше до этого не программировали. Только на паскале. Кое-как реализовал, но с rm - r:

#!/bin/sh
until false do
 echo  файлы в каталоге:
 ls
 echo  введите название каталога, либо q для выхода
 read z
 if [ $z = q ] then
  echo выход; break
 else
  if [ -d $z ]
  then
   rm -r $z
  echo каталог удален;
  else echo директории не существует; break
  fi
 fi
 done

Преподаватель сказал, что удалять введенные каталоги нужно только с помощью rm. Т.е. сначала нужно проверить, есть ли в них что-нибудь, удалить все, а потом удалить каталог. Но т.к. они могут быть еще и с вложенными каталогами, то нужно и из них сначала все удалять. Как реализовать в скрипте такую рекурсию?
« Последнее редактирование: 18 Апреля 2013, 23:48:20 от Чистый »

Оффлайн Jack Sparrow

  • Активист
  • *
  • Сообщений: 641
    • Просмотр профиля
Re: Скрипт на bash, для удаления директорий
« Ответ #1 : 24 Апреля 2013, 01:30:00 »
Проще всего было бы сделать так:
Код: (bash) [Выделить]
find . "*" -delete
Но тут нет rm. А с rm можно так:
Код: (bash) [Выделить]
find . -iname "*" -type f | xargs -I {} rm -fv {} ; find . -iname "*" -type d | xargs -I {} rmdir -p {}
Тут сначала находятся и удаляются обычные файлы (опция -type f), а при втором проходе уже удаляются директории (опция  -type d). Правда, во втором проходе используется не rm, а rmdir. Можно было бы rm -d, но там, видимо, скрытые файлы мешают удалению. А с опцией rmdir -p удаляется все, хоть и выводится какое сообщение об ошибке.

PS. Хотя не уверен, что преподу нужно именно так. Видимо, ему нужен не столько результат, сколько именно его путем (т.е. ему может использование find не понравиться, мол, сам пиши обход каталогов).
Нейросети тебя не заменят. Тебя заменит человек, который умеет ими пользоваться.

 

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