Есть задача – удалять из заданных директорий все файлы кроме тех, «расширения» которых входят в заданный список:
- .mp3
- .mp3_env
- .mp3_dig
- .mp2_env
- .mp2_dig
- .wav
- .wav_env
- .wav_dig
Сразу приношу свои извинения эстетам, которые скажут, что в UNIX-like OS нет понятия «расширение имени файла», и что это чисто DOS-овская терминология. Я понимаю, просто так проще было выразить мысль :)
-
#!/bin/bash
-
-
PREFIX=/var/spool/samba
-
SUBJ="Deleted files from $PREFIX at `/bin/hostname -s`"
-
TMP=/var/tmp/`basename $0`.$$
-
EMAIL=admin@somehost.com
-
# Base list of allowed extensions
-
EXTs="mp3 mp2 wav"
-
REGEX=".*\.\("
-
-
for i in $EXTs; do
-
REGEX="${REGEX}${i}\|"
-
REGEX="${REGEX}${i}_env\|"
-
REGEX="${REGEX}${i}_dig\|"
-
done
-
-
# Trailing "|" deleting
-
REGEX=${REGEX/%|/}
-
# Trailing "\" deleting
-
REGEX=${REGEX/%\\/}
-
# Closing regex
-
REGEX="${REGEX}\)$"
-
# В результате получили такой regex:
-
# ".*\.\(mp3\|mp3_env\|mp3_dig\|mp2\|mp2_env\|mp2_dig\|wav\|wav_env\|wav_dig\)$"
-
-
for DIR in ${PREFIX}|>/dir1 ${PREFIX}|>/dir2; do
-
find $DIR -type f ! -iregex "${REGEX}" -print0 | \
-
/usr/bin/xargs --null -r stat --printf="|%n|\n" >> $TMP
-
find $DIR -type f ! -iregex "${REGEX}" -print0 | \
-
/usr/bin/xargs --null -r rm
-
done
-
-
if [ `/bin/cat $TMP | /usr/bin/wc -l` -gt 0 ]; then
-
/bin/cat $TMP | /bin/mail -s "$SUBJ" $EMAIL -- -f robot@someserver.com
-
fi
-
-
[ -f $TMP ] && rm $TMP
Популярность: 1%

Комментариев: 4
Чтобы быть всегда в курсе здесь происходящего, Вы можете подписаться на RSS feed для комментариев на эту заметку.
Хорошая статья, да и сам сайт я смотрю очень даже не плох. Попал сюда по поиску из Google, занес в букмарки :)
А зачем в команде mail два минуса?
В команде mail два минуса нужны чтобы было возможным указать обратный адрес с ключом -f. Без двух минусов почему-то не работает.
digiton файлы разметки )))