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


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: скрип для удаления резервных файлов *~  (Прочитано 3007 раз)

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

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: скрип для удаления резервных файлов *~
« Ответ #15 : 29 Июня 2009, 20:02:07 »
if [[ ${filename##*.} == "gz" ]]
Зачем такие извращения, когда есть одна чудесная команда find...

Сперва смотрим, что есть:
find $HOME -name *~ -type f -exec ls -l '{}' \;Потом удаляем, что не нужно:
find $HOME -name *~ -type f -exec rm -v '{}' \;
« Последнее редактирование: 29 Июня 2009, 20:06:05 от ArcFi »

Оффлайн cupper

  • Автор темы
  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: скрип для удаления резервных файлов *~
« Ответ #16 : 29 Июня 2009, 20:14:20 »
эти строки кода работают со всем что нашли разом непредоставляя програмисту возможности работать с тем что было найдено в циклах, а только путем удленения нагромождения этих сток.
Конечно это может звучать бредово, и бредом быть и вовсе, но мне понятной когда есть возможность обрабатывать каждое найденое имя файла в отдельности, вот только для этого и нужны наверно такие ухирщения.
В идеале былоб класно еслиб можно было обращаться в найденому имени файла как к массиву символов и сравнить (в условии данной задачи) последний символ файла с ~. Я сомневаюс что такое можно в баше :)
вы конечно можете сказать что bash не для этого создавали, но лучьше тогда проста промолчать.

напомню с чего все начиналось
#!/bin/bash
for filename in $(ls) ; do
if [[ смотрим что последний символ в $filename = "~" ]]
then
  echo "резервный файл: $filename"
fi
done
PS. мне не результат важен, а процес обучения

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: скрип для удаления резервных файлов *~
« Ответ #17 : 29 Июня 2009, 20:37:41 »
Мы решаем задачу или учимся писать скрипты? :)

Если хотите решить задачу, почему бы не сделать это эффективно.
Если желаете научиться писать скрипты, то для начала стоит почитать, что-нибудь типа
http://www.google.ru/search?q=введение+в+bash

А то ведь получается -- ни то, ни сё.

Оффлайн Protopopulus

  • Старожил
  • *
  • Сообщений: 1695
  • А чего вы так смотрите?..
    • Просмотр профиля
Re: скрип для удаления резервных файлов *~
« Ответ #18 : 29 Июня 2009, 20:48:31 »
Чтобы рекурсивно удалить в директории и ее поддиректориях все файлы вида *~ достаточно ввести в терминале:
find /name/of_target/directory -type f -name *~ -exec rm {} \; :D
« Последнее редактирование: 29 Июня 2009, 20:50:26 от Protopopulus »
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

Оффлайн cupper

  • Автор темы
  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: скрип для удаления резервных файлов *~
« Ответ #19 : 29 Июня 2009, 20:57:20 »
уже читаю 3 введение в баш...
и всеже как работает сточка кода
if [[ ${filename##*.} == "gz" ]]PS. учусь писать скрипты, на конкретных задачах
« Последнее редактирование: 29 Июня 2009, 21:06:36 от cupper »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: скрип для удаления резервных файлов *~
« Ответ #20 : 29 Июня 2009, 21:05:35 »
уже читаю 3 введение в баш...
Если готовы к более серьёзной литературе, могу дать ссылки.

и всеже как работает сточка кода
if [[ ${filename##*.} == "gz" ]]
[[ выражение ]]
    Возвращает статус 0 или 1 в зависимости от значения указанного
    условного выражения. Выражения состоят из компонентов, описанных
    ниже в разделе "УСЛОВНЫЕ ВЫРАЖЕНИЯ".
    Деление слов и подстановка
    имен файлов в словах между [[ и ]] не выполняется;
    выполняется замена тильды, подстановка значений параметров и переменных,
    арифметическая подстановка, подстановка результатов команд и
    подстановка процессов, а также удаление кавычек.

${параметр##слово}
    Слово рассматривается как шаблон, аналогичный шаблону имен файлов. Если шаблон
    сопоставляется с началом значения параметра, то результатом будет значение параметра,
    из которого удалена самая короткая (в случае #) или самая длинная (в случае
    ##) подстрока. Если параметр - @ или *, операция удаления шаблона применяется
    поочередно к каждому позиционному параметру и подставляется полученный в результате
    список. Если параметр - массив с индексом @ или *, операция удаления шаблона
    применяется поочередно к каждому элементу массива и подставляется полученный
    в результате список.
« Последнее редактирование: 29 Июня 2009, 21:09:50 от ArcFi »

Оффлайн cupper

  • Автор темы
  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: скрип для удаления резервных файлов *~
« Ответ #21 : 29 Июня 2009, 21:19:48 »
ооо, спасибо большое как раз то что нужно, теперь надо понять это :)

Оффлайн Protopopulus

  • Старожил
  • *
  • Сообщений: 1695
  • А чего вы так смотрите?..
    • Просмотр профиля
Re: скрип для удаления резервных файлов *~
« Ответ #22 : 29 Июня 2009, 21:23:00 »
[offtop] Может тему переименовать в "Учимся Shell-у"? :D [/offtop]
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

Оффлайн cupper

  • Автор темы
  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: скрип для удаления резервных файлов *~
« Ответ #23 : 29 Июня 2009, 21:28:54 »
нЭд, потомучто искомая задача была решена :)
вот что я хотел получить
#!/bin/bash
for filename in $(ls) ; do
if [[ -f $filename && ${filename##*~} == "" ]]
then
  echo "резервный файл: $filename"
fi
done
щас еще добалвю проверку на то что был найде именно файл а некаталог и не файл устройства, и ништяк :)
всем спс за помощь !
« Последнее редактирование: 29 Июня 2009, 21:40:43 от cupper »

 

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