Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
mazay
- проходил мимо
Непрочитанное сообщение
mazay » 2009-06-22 17:00:53
в общем передаю путь к папке и пытаюсь удалить ее содержимое, однако получаю сообщение
Код: Выделить всё
rm -v /mnt/hda1/333/*
rm: Невозможно удалить `/mnt/hda1/333/*' No such file or directory
Папка однозначно есть и получившаяся команда rm -v /mnt/hda1/333* выполняется
Чего я не дочитал и не досмотрел? И как сделать правильно?
mazay
-
Хостинг HostFood.ru
-
Хостинг HostFood.ru
Тарифы на хостинг в России, от 12 рублей:
https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.:
https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах:
https://www.host-food.ru/domains/
-
zg
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Непрочитанное сообщение
zg » 2009-06-22 17:19:47
mazay писал(а):echo "/mnt/hda1/333/*" | xargs -p rm -v
кавычки нада убрать

zg
-
mazay
- проходил мимо
Непрочитанное сообщение
mazay » 2009-06-23 9:43:17
кавычки нада убрать
точно. СПАСИБО.
Это я вопрос не совсем корректно задал. Пишу скрипт со следующим алгоритмом
1 Строю дерево папок
2 Исключаю из этого дерева нужные папки
3 форматирую вывод
4 из оставшихся папок удаляю файлы
Вот примерный код
Код: Выделить всё
ls -RF 333/ | grep : | egrep -v -f exclude | sed -e '1d' -e '/\:/\/\*/' | xargs -t rm -v
выдает тоже, что и приведенный выше мной пример.
Как тут кавычки убрать?

mazay
-
zg
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Непрочитанное сообщение
zg » 2009-06-23 10:57:38
mazay писал(а):Как тут кавычки убрать?
а что сделать то нужно? то есть с какой целью идут операции?
zg
-
mazay
- проходил мимо
Непрочитанное сообщение
mazay » 2009-06-23 12:58:05
Вообще нужно удалить из дерева папок все папки кроме указанных в файле exclude для очистки места.
На shell пишу первый раз, потому избрал наверно путь через задницу. Наверняка есть альтернатива и гораздо проще, но я ее не нашел
Сформатировал необходимый вывод папок с помощью ls -R, отсортировал его в обратном порядке командой sort, чтобы папки самого нижнего уровня выводились первыми, ну и теперь хочу командами rm -f удалять содержимое этих папок, а затем удалять сами папки командой rmdir, пользуясь тем, что эта команда не удаляет непустые каталоги. Делать сразу rm -rf при таком раскладе нельзя, поскольку удалятся все папки до корня
Как делается проще не знаю и победить xargs тоже не получается.
mazay
-
zg
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Непрочитанное сообщение
zg » 2009-06-23 17:17:33
mazay писал(а):Делать сразу rm -rf при таком раскладе нельзя, поскольку удалятся все папки до корня
тут всё намного проще:
1. создаёшь список папок на удаление
2. устраняешь из спсика ценные папки
3. через rm -rf удаляешь каждую папку из списка
zg
-
mazay
- проходил мимо
Непрочитанное сообщение
mazay » 2009-06-24 13:24:15
Спасибо надо попробовать. В общем решил так, как я и описал. Итогового срипта под рукой нет, но получилось примерно так
Код: Выделить всё
find 333/ | egrep -v -f [тут имя файла исключений] | xargs rm -f
Правда в дистрибутиве, в котором я работал (Linux Puppy 301) оказалось какое-то ограничение при передаче аргументов команде xargs. Весь список не принимался с ошибкой argument is too long или как-то так. А во FreeBSD все работает как и задумано.
mazay