Скрипт для удаления всех файлов в каталоге, а затем по электронной почте - PullRequest
0 голосов
/ 11 октября 2011

Нужен скрипт для удаления всех файлов в каталоге, а затем по электронной почте после завершения, у меня есть шаблон ниже, но я не уверен, что это будет работать - конечно, никакой компонент электронной почты не был добавлен!

#!/bin/sh
DIR="/var/www/public_html/docs/files/"
LIST=`ls -l $DIR | grep -v "total 0"`
FILES=`ls $DIR`
cd $DIR
if [ -z "$LIST" ]
then
  exit
else
  echo "Files Delete:"
  echo $FILES
  rm -f *
fi

Обновление:

#!/bin/sh
DIR="/home/test/test/docs/test/"
cd $DIR
rm -f *

1 Ответ

1 голос
/ 11 октября 2011

Некоторые заметки:

Вы используете all-caps DIR, LIST и FILES, но переменные all-caps в сценариях оболочки, как правило, являются переменными среды. Вы должны использовать, например,

dir='/var/www/public_html/docs/files/'

вместо.

Чтобы узнать, сколько файлов в каталоге, используйте

find "$dir" -maxdepth 1 -type f | wc -l

Вы используете как СПИСОК и ФАЙЛЫ; кажется, что вы пытаетесь выяснить, есть ли какие-либо файлы, прежде чем удалять их. Это не имеет смысла с точки зрения функциональности, но если вы должны условно отобразить список файлов, лучше принять решение таким образом.

if [ $(find "$dir" -type f | wc -l) -gt 0 ] ; then
    echo Files Delete:
    find "$dir" -printf '%f '
fi

Хотя вы должны знать, что этот вывод нельзя надежно использовать для восстановления фактических имен файлов.

Для фактического удаления файлов вы должны снова использовать find

find "$dir" -maxdepth 1 -type f -delete

Собираем все вместе

dir='/var/www/public_html/docs/files/'

if [ $(find "$dir" -type f | wc -l) -gt 0 ] ; then
    echo Files Delete:
    find "$dir" -maxdepth 1 -type f  -printf '%f ' -delete
fi

Здесь я объединил шаги «печать файлов» и «удаление файлов» в один вызов find.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...