Skip to content


Удаление файлов, расширения которых не входят в заданный список

Есть задача – удалять из заданных директорий все файлы кроме тех, "расширения" которых входят в заданный список:

  • .mp3
  • .mp3_env
  • .mp3_dig
  • .mp2_env
  • .mp2_dig
  • .wav
  • .wav_env
  • .wav_dig

Сразу приношу свои извинения эстетам, которые скажут, что в UNIX-like OS нет понятия "расширение имени файла", и что это чисто DOS-овская терминология. Я понимаю, просто так проще было выразить мысль :)

  1. #!/bin/bash
  2.  
  3. PREFIX=/var/spool/samba
  4. SUBJ="Deleted files from $PREFIX at `/bin/hostname -s`"
  5. TMP=/var/tmp/`basename $0`.$$
  6. EMAIL=admin@somehost.com
  7. # Base list of allowed extensions
  8. EXTs="mp3 mp2 wav"
  9. REGEX=".*\.\("
  10.  
  11. for i in $EXTs; do
  12.   REGEX="${REGEX}${i}\|"
  13.   REGEX="${REGEX}${i}_env\|"
  14.   REGEX="${REGEX}${i}_dig\|"
  15. done
  16.  
  17. # Trailing "|" deleting
  18. REGEX=${REGEX/%|/}
  19. # Trailing "\" deleting
  20. REGEX=${REGEX/%\\/}
  21. # Closing regex
  22. REGEX="${REGEX}\)$"
  23. # В результате получили такой regex:
  24. # ".*\.\(mp3\|mp3_env\|mp3_dig\|mp2\|mp2_env\|mp2_dig\|wav\|wav_env\|wav_dig\)$"
  25.  
  26. for DIR in ${PREFIX}|>/dir1 ${PREFIX}|>/dir2; do
  27.   find $DIR -type f ! -iregex "${REGEX}" -print0 | \
  28.     /usr/bin/xargs --null -r stat --printf="|%n|\n" >> $TMP
  29.   find $DIR -type f ! -iregex "${REGEX}" -print0 | \
  30.     /usr/bin/xargs --null -r rm
  31. done
  32.  
  33. if [ `/bin/cat $TMP | /usr/bin/wc -l` -gt 0 ]; then
  34.   /bin/cat $TMP | /bin/mail -s "$SUBJ" $EMAIL -- -f robot@someserver.com
  35. fi
  36.  
  37. [ -f $TMP ] && rm $TMP
Прекрасные сумки Киев купить можно в интернет магазине сумок БрендМаг. . охорона .

Размещено в категории *nix. Теги: , , , .

Комментариев: 4

Чтобы быть всегда в курсе здесь происходящего, Вы можете подписаться на RSS feed для комментариев на эту заметку.

  1. гaгaш said

    Хорошая статья, да и сам сайт я смотрю очень даже не плох. Попал сюда по поиску из Google, занес в букмарки :)

  2. Вася said

    А зачем в команде mail два минуса?

  3. Сергей said

    В команде mail два минуса нужны чтобы было возможным указать обратный адрес с ключом -f. Без двух минусов почему-то не работает.

  4. Игорь said

    digiton файлы разметки )))

Some HTML is OK

(required)

(required, but never shared)

, или ответить через trackback.

Страница 1 из 11