Чистка каталогов

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
Voral
Сообщения: 1205
ОС: Debian Wheezy (amd64)

Чистка каталогов

Сообщение Voral »

Задача:
Написать скрипт который будет удалять файлы в текущем каталоге и во всех вложенных в текущий по заданным маскам. Маски хранятся в файле (строка - одна маска) mask.lst. При этом:
- по крайней мере одна маска формируется самим скриптом;
- некоторые маски должны работать только в указанном каталоге т.е. маска типа "subdir/*.cfg"
- возможно задавать для удаления каталог

Пример, имеем дерево:
./project
./project/subdir1
./project/subdir1/file11
./project/subdir1/file12
./project/subdir1/file11~ (должен быть удален)
./project/subdir2
./project/subdir2/file21
./project/subdir2/file22
./project/subdir2/file22~ (должен быть удален)
./project/subdir2/file21.jpg (должен быть удален)
./project/subdir2/file21.jpg (должен быть удален)
./project/subdir3 (должен быть удален)
./project/subdir3/file31 (должен быть удален)
./project/subdir3/file32 (должен быть удален)
./project/file01
./project/file01~ (должен быть удален)
./project/mask.lst

Желаемый вид mask.lst
*~
subdir2/*.jpg
subdir3


Пока достиг следующего:

Код: Выделить всё

#!/bin/sh
CURDIR=`pwd | sed -rn "s/.*\/([^\/]*)$/\1/gp"`
cat mask.list | xargs -i find -type f -name "{}" -delete
find -type f -name $CURDIR"20*" -delete


Но тут не могу задавать удаление каталогов и файлов в определенном каталоге.
И вот тут я "завис".

Как решить задачу по "шелловски"?

Наметки две:
1. бежать по каждой маске в цикле. Парсить ее если содержит слэш на путь - маска. И далее вормировать команду find ... -delete (тут мне не ясно что делать с каталогами)
2. Бежать по выводу команды ls и для каждого файла проверять есть ли подходящая маска.
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Чистка каталогов

Сообщение sash-kan »

может, по-другому можно подойти?
это проект? он управляется какой-то vcs?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Чистка каталогов

Сообщение watashiwa_daredeska »

Код: Выделить всё

dir=project
eval find $dir \
  $(prefix=$dir/; while read p; do [ -n "$or" ] && printf " -o "; or=1; printf -- "-wholename '%s%s'" "$prefix" "$p"; done <$dir/mask.lst) \
  -delete
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Чистка каталогов

Сообщение drBatty »

Voral писал(а):
25.03.2010 13:28
Желаемый вид mask.lst
Цитата
*~
subdir2/*.jpg
subdir3

Код: Выделить всё

sed 's/.*/find -depth -name "&" -exec rm {} \\;/e' mask.lst

не пойдёт? тут конечно проблема с каталогами, но насколько я помню, её решить можно двумя командами find -type f и find -type d, или даже одной, используя rm -r.
Voral писал(а):
25.03.2010 13:28
2. Бежать по выводу команды ls и для каждого файла проверять есть ли подходящая маска.

а чем маски проверять? если у вас есть файл и маска - понятно, сам баш может. но у вас будет ИМЯ файла и маска.

ЗЫЖ забыл слеш экранировать в find, исправил.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Voral
Сообщения: 1205
ОС: Debian Wheezy (amd64)

Re: Чистка каталогов

Сообщение Voral »

sash-kan писал(а):
25.03.2010 14:29
может, по-другому можно подойти?
это проект? он управляется какой-то vcs?

да это проекты.
Они ни чем не управляются.
Цель по завершении проекта его очистить от мусора и убрать в архив

watashiwa_daredeska, drBatty спасибо. Сейчас попробую и осознаю
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Чистка каталогов

Сообщение drBatty »

Voral писал(а):
26.03.2010 09:06
Цель по завершении проекта его очистить от мусора и убрать в архив

лично я убираю в архив весь "немусор"
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Voral
Сообщения: 1205
ОС: Debian Wheezy (amd64)

Re: Чистка каталогов

Сообщение Voral »

drBatty писал(а):
26.03.2010 12:57
Voral писал(а):
26.03.2010 09:06
Цель по завершении проекта его очистить от мусора и убрать в архив

лично я убираю в архив весь "немусор"

Можно и так - я даже не задумался об заходе с такой стороны :). Просто у меня до сих пор под линукс отведено всего 19 гигов, остальное под нтфс. И впорос экономии места важен.... Т.е этот скрипт я бы и без архивирования использовал.....
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Чистка каталогов

Сообщение sash-kan »

Voral
в таком случае можете рассматривать мой вопрос как намёк на использование vcs.
svn для однопользовательской работы — пожалуй, будет громоздко, а вот тот же git — imho, вполне.
главное — определение «этот файл входит в проект, clean-ом его не надо трогать» будет сразу же интегрировано и доступно без лишних телодвижений. помимо всех остальных прелестей учёта версий.

upd. собственно, если ваш взгляд остановится на git-е, архивировать можно лишь его bare-часть, находящуюся в .git/.
там заведомо не будет ни одного «лишнего» байта.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Чистка каталогов

Сообщение drBatty »

Voral писал(а):
28.03.2010 20:29
Просто у меня до сих пор под линукс отведено всего 19 гигов, остальное под нтфс. И впорос экономии места важен.... Т.е этот скрипт я бы и без архивирования использовал.....


ну если это программа или что-то похожее, то места это занимает совсем немного - вам потребуется сохранять только новые текстовые файлы. У мну они каждые 7 минут сохраняются, и места это всё занимает очень мало. Двоичные файлы можно не сохранять(к примеру исполняемый файл программы на С - его можно не сохранять, главное - исходник), или сохранить один раз (к примеру картинки обычно никогда не меняются).

http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Чистка каталогов

Сообщение t.t »

drBatty писал(а):
29.03.2010 01:23
Voral писал(а):
28.03.2010 20:29
Просто у меня до сих пор под линукс отведено всего 19 гигов, остальное под нтфс. И впорос экономии места важен.... Т.е этот скрипт я бы и без архивирования использовал.....
ну если это программа или что-то похожее, то места это занимает совсем немного - вам потребуется сохранять только новые текстовые файлы. У мну они каждые 7 минут сохраняются, и места это всё занимает очень мало. Двоичные файлы можно не сохранять(к примеру исполняемый файл программы на С - его можно не сохранять, главное - исходник), или сохранить один раз (к примеру картинки обычно никогда не меняются).
Собственно, примерно это можно делать гораздо меньшей кровью с помощью git или mercurial, чем самописными скриптами: файлы, не изменяемые никогда, по определению сохранятся единожды, да и для текстовых файлов будут сохраняться только diff-ы.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Чистка каталогов

Сообщение t.t »

t.t писал(а):
29.03.2010 07:57
с помощью git или mercurial
Я, кстати, рекомендую посмотреть их оба (хотя бы по обзорам и описаниям) и выбрать на свой вкус: по возможностям они практически идентичны (разница и сама по себе несущстевенна, а в контексте обсуждаемой задачи -- и вовсе незаметна), а по стилю работы хоть и немного, но отличаются.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Чистка каталогов

Сообщение drBatty »

t.t писал(а):
29.03.2010 08:12
mercurial

вот нашёл такой мануал. вроде понятный.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Чистка каталогов

Сообщение t.t »

drBatty писал(а):
29.03.2010 15:11
t.t писал(а):
29.03.2010 08:12
mercurial
вот нашёл такой мануал. вроде понятный.
Среди сохранившихся у меня ссылок по mercurial русскоязычных всего несколько, и это одна из них. Вот остальные:
http://www.developers.org.ua/archives/pira...rcurial-basics/
http://mercurial.selenic.com/wiki/RussianTutorial
http://mercurial.selenic.com/wiki/RussianU...andingMercurial
И один пока неоконченный перевод:
http://translated.by/you/distributed-revis...with-mercurial/
Англояхычной информации, конечно же, гораздо больше.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
Voral
Сообщения: 1205
ОС: Debian Wheezy (amd64)

Re: Чистка каталогов

Сообщение Voral »

t.t, drBatty
Спасибо за ссылки. Понимаю, что это полезное для меня, но консерватизм блин....

Хотя, в данном случае, вроде, это как микроскомпом гвозди (не очень удачное сравнение, но слишком избыточен инструмент). Для программных проектов оно, а для такой мелочи как верстка.... К тому же бегло прочитав показалось, что экономия места убъется созданием репозиториев...

К тому же задача для меня еще имеет и познавательный характер.
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Чистка каталогов

Сообщение sash-kan »

Voral
поверьте на слово: git-репозиторий даже для «проекта» по написанию короткой статейки — это совсем не «микроскопом по гвоздям». это просто удобно.

попробуйте ввести такую практику для себя «насильно». (улыбка).
через некоторе время «втянетесь» и будете удивляться, как же вы жили до этого. (опять улыбка).
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Чистка каталогов

Сообщение t.t »

Voral писал(а):
30.03.2010 18:51
Хотя, в данном случае, вроде, это как микроскомпом гвозди (не очень удачное сравнение, но слишком избыточен инструмент).
Отнюдь нет. Использование VCS для таких задач практикуется с момента их создания. Теоретически, конечно, можно использовать даже RCS. Но практически он "именно для таких задач" только в том смысле, что для других не подходит -- и это вовсе не означает, что здесь не подходят другие VCS, в том числе и распределённые. Более того -- они, вопреки названию, и в этом случае намного удобнее.

Voral писал(а):
30.03.2010 18:51
К тому же бегло прочитав показалось, что экономия места убъется созданием репозиториев...
Снова таки отнюдь нет. (: В репозиториях-то информация хранится в сжатом виде, что в случае текста более чем существенно.

Voral писал(а):
30.03.2010 18:51
К тому же задача для меня еще имеет и познавательный характер.
Вот разве что в качестве упражнения... Впрочем, на мой взгляд, опыт с dvcs и в познавательном смысле намного полезнее.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали: