Написать скрипт который будет удалять файлы в текущем каталоге и во всех вложенных в текущий по заданным маскам. Маски хранятся в файле (строка - одна маска) 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 и для каждого файла проверять есть ли подходящая маска.