Есть задача – удалять из заданных директорий все файлы кроме тех, «расширения» которых входят в заданный список:
- .mp3
- .mp3_env
- .mp3_dig
- .mp2_env
- .mp2_dig
- .wav
- .wav_env
- .wav_dig
Сразу приношу свои извинения эстетам, которые скажут, что в UNIX-like OS нет понятия «расширение имени файла», и что это чисто DOS-овская терминология. Я понимаю, просто так проще было выразить мысль :)
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}\)$"
# echo "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
Чтобы быть всегда в курсе здесь происходящего, Вы можете подписаться на RSS feed для комментариев на эту заметку.
Хорошая статья, да и сам сайт я смотрю очень даже не плох. Попал сюда по поиску из Google, занес в букмарки :)