Отправляет email-рассылки с помощью сервиса Sendsay

Удаление файлов (все, кроме одного)

Привет всем.

Есть куча файлов
file01.tex
file01.dvi
file01.ps
file01.xml
file01.htm
file02.tex
file02.dvi
file02.ps
file02.xml
file02.htm
...
fileNN.tex
fileNN.dvi
fileNN.ps
fileNN.xml
fileNN.htm

Переодически необходимо удалять все файлы, кроме tex
rm *.dvi *.ps *.xml *.htm

Однако могут добавится файлы с другим расширением.

Написал такое
#-- rmallexept.ch
#!/bin/bash
rmtempdir=$TMPDIR/$(date +%Y%m%d)
mkdir -p $rmtempdir
mv *.tex $rmtempdir
rm *
mv $rmtempdir/*.tex $PWD
rmdir $rmtempdir

Может кто подскажет более элегантное решение
Что-то типа:
rmAllExcept *.tex file02.ps file03.xml

Ответить   Sat, 11 Feb 2006 17:58:07 +0600 (#513762)

 

Ответы:

В сообщении от 1139673487 секунд после начала Эпохи Владимир Ковалев написал(а):

Не намного лучше:

$ rm *.{dvi,ps,xml,htm}

Или:

$ find -type f ! -name '*.tex' -delete

IMHO, проще использовать утилиту make.

начало Makefile %.dvi: %.tex
latex $<

%.ps: %.dvi
dvips -o $@ $<

%.xml: %.tex
xmltex $<

%.pdf: %.tex
pdflatex $<

clean:
rm -f *.dvi *.ps *.xml *.htm
конец Makefile В результате, чтобы получить, например, `file01.ps', нужно выполнить:

$ make file01.ps

При этом если соответствующего DVI-файла не существует или он старее
чем соответствующий TEX-файл, то make создаст этот недостающий DVI-файл
автоматически применяя первое правило из `Makefile'.

Чтобы удалить выходные файлы:

$ make clean

Приведенный `Makefile' конечно очень упрощенный. В действительности я
использую более сложные файлы с большим числом правил и переменных, что
позволяет мне автоматически строить зависимости между файлами,
автоматически конвертировать форматы изображений (включая вызов
MetaPost'а), задавать опции для dvips, выполнять несколько проходов
latex, и т.п.

Ответить   Konstantin Korikov Sat, 11 Feb 2006 19:18:36 +0200 (#513879)

 

On Sat, 11 Feb 2006 19:18:36 +0200
Konstantin Korikov <lostcl***@u*****.net> wrote:

Вот это можно считать элегантным решением.
Как иногда полезно перед заданием вопроса почитать man

проекта.
Просто на определенных этапах необходимо зачистить от програмно создаваемых
файлов один из подкаталогов проекта. То есть в таком случае make clean
неприемлимо.
Хотя наверное буду использовать makefile для подкаталогов. Тем более он уже
есть. Правда довольно простой
all:
cd ..; make
теперь наверное добавлю в него
clean:
rm *.log *.mpx
И буду использовать: make clean && make
А в корневом makefile
clean:
rm *.dvi *.ps
cd part1; make clean
cd part2; make clean

Спасибо за ответы.
Всех благ.

Ответить   Sun, 12 Feb 2006 11:31:22 +0600 (#514029)

 

В сообщении от 1139736682 секунд после начала Эпохи Владимир Ковалев написал(а):

Я делаю так:

clean-wrap: clean-wrap-recursive
rm -f $(WRAP_TEXS) $(WRAP_PDFS) $(WRAP_DVIS) $(WRAP_PSS) \
$(addsuffix .aux, $(WRAP_BASENAME)) \
$(addsuffix .log, $(WRAP_BASENAME)) \
$(addsuffix .toc, $(WRAP_BASENAME))

clean-wrap-recursive:
for i in $(SUBDIRS); do $(MAKE) -C $$i clean-wrap || exit $$?; done

clean: clean-wrap clean-recursive
rm -f $(PDF_DOC) $(DVI_DOC) $(PS_DOC) \
$(addsuffix .aux, $(TEX_BASENAME)) \
$(addsuffix .log, $(TEX_BASENAME)) \
$(addsuffix .toc, $(TEX_BASENAME)) \
$(MP_MPSS) \
$(addsuffix .log, $(MP_BASENAME)) \
$(addsuffix .mpx, $(MP_BASENAME)) \
$(MP_MEM) \
$(addsuffix .log, $(MP_MEM_BASENAME))
rm -rf .deps

clean-recursive:
for i in $(SUBDIRS); do $(MAKE) -C $$i clean || exit $$?; done

Это записано в `Rules.mak', который включается (`include
$(TOP_DIR)/Rules.mak') во всех `Makefile'.

Ответить   Konstantin Korikov Sun, 12 Feb 2006 18:56:28 +0200 (#514237)

 

On Sun, 12 Feb 2006 18:56:28 +0200
Konstantin Korikov <lostcl***@u*****.net> wrote:

Понял. Спасибо. Примерно к этому почти дошел сам.

Ответить   Mon, 13 Feb 2006 20:05:14 +0600 (#514613)