Есть задача – удалять из заданных директорий все файлы кроме тех, "расширения" которых входят в заданный список:
- .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
Хорошая статья, да и сам сайт я смотрю очень даже не плох. Попал сюда по поиску из Google, занес в букмарки :)
А зачем в команде mail два минуса?
В команде mail два минуса нужны чтобы было возможным указать обратный адрес с ключом -f. Без двух минусов почему-то не работает.
digiton файлы разметки )))