Короче говоря, я пытаюсь найти дубликаты файлов (которые были загружены с FTP-сайта, это другой файл скрипта) и отправить по электронной почте компании обо всех дубликатах файлов и соответствующих датах их изменения.
Файл /path/test_mail.txt
содержит одно имя файла на строку (в данном случае два имени файла), например
abc.xlsx
def.xlsx
В приведенном ниже коде я пытаюсь найти модифицированную метку даты-времени для первое имя файла и передайте его с соответствующим именем файла и отправьте электронное письмо, аналогично l oop работает для второго.
Это использует stat
for val in '/path/test_mail.txt'; do
{ stat path/$val | grep 'Modify: ' | cut -d' ' -f2,3,4 | awk -F"." '{print $1}' ; } |
$val
done |
mail -s "Duplicate file found ${DATE}" abc@xyz.com
Я также пробовал в другой способ использования ls -ltr
for val in '/path/tj_mail.txt'; do
{ ls -ltr /path/$val | cut -d' ' -f6,7,8 | find $val / -path
$val
done |
mail -s "Duplicate file found ${DATE}" abc@xyz.com
Я ожидал, что тело письма должно быть примерно таким же, как
Дубликат имени файла - xyz.xlsx Время загрузки - 2020-02-17 11: 18:10
Дубликат имени файла - ab c .xlsx Время загрузки - 2020-02-17 11: 18: 10
Следующий вопрос не является обязательным, но это будет отлично, если вы можете мне помочь!
Также я использую другой скрипт для поиска дубликатов имен файлов в каталоге. это прекрасно работает. Но мне интересно, смогу ли я втиснуть тот же код выше в один файл скрипта, чтобы он был четким и простым!
{
DATE=`date +"%Y-%m-%d"`
dirname=/path
tempfile=myTempfileName
find $dirname -type f > $tempfile
cat $tempfile | sed 's_.*/__' | sort | uniq -d|
while read fileName
do
grep "$fileName" $tempfile
done
} | tee '/path/tj_var.txt' | awk -F"/" '{print $NF}' | tee '/path/tj_var.txt' | sort -u | tee '/path/tj_mail.txt' | mail -s "Duplicate file found ${DATE}" abc@xyz.com
Это мой настоящий код
path = /marketsource/SrcFiles/Target_Shellscript_Autodownload/Airtime_Activation
printf "%s" "$(</marketsource/scripts/tj_mail.txt)" | while IFS= read -r filename; do
mtime=$(stat -c %y "/path/$filename")
printf 'Duplicate Filename - %s Uploaded time - %s\n' "$filename" "$mtime"
done | mail -s "Duplicate file found ${DATE}" tipalli@allegisgroup.com
mtime=$(stat -c %y "/path/$filename" 2>/dev/null || echo "unknown (stat failed)")
это ошибка!
. / Tj_mail1.k sh: строка 1: путь: команда не найдена stat: невозможно stat `/ path / AirTimeActs_2020-02- 08.xlsx ': Нет такого файла или каталога
Немного больше !!
Моя цель - найти дубликаты файлов, если нет дубликатов файлов. и команда find пуста, затем выполните условие if, выполните команду mv и полностью выйдите из сценария, если они являются дублирующимися файлами, затем выйдите из условия if и передайте дубликаты файлов и выполните операцию печати по почте и дате.
{
DATE=`date +"%Y-%m-%d"`
dirname=/marketsource/SrcFiles/Target_Shellscript_Autodownload/Airtime_Activation
tempfile=myTempfileName
find $dirname -type f > $tempfile
cat $tempfile | sed 's_.*/__' | sort | uniq -d|
while read fileName
do
grep "$fileName" $tempfile
done
}
if ["$fileName" == ""]; then
mv /marketsource/SrcFiles/Target_Shellscript_Autodownload/Airtime_Activation/*.xlsx /marketsource/SrcFiles/Target_Shellscript_Autodownload/Airtime_Activation/Archive
mv /marketsource/SrcFiles/Target_Shellscript_Autodownload/Airtime_Activation/*.csv /marketsource/SrcFiles/Target_Shellscript_Autodownload/Airtime_Activation/Archive
exit 1
fi | tee '/marketsource/scripts/tj_var.txt' | awk -F"/" '{print $NF}' | tee '/marketsource/scripts/tj_var.txt' | sort -u | tee '/marketsource/scripts/tj_mail.txt'
DATE=`date +"%Y-%m-%d"`
printf "%s\n" "$(</marketsource/scripts/tj_mail.txt)" | while IFS= read -r filename; do
mtime=$(stat -c %y "/marketsource/SrcFiles/Target_Shellscript_Autodownload/Airtime_Activation/$filename")
printf 'Duplicate Filename - %s Uploaded time - %s\n\n' "$filename" "$mtime"
done | mail -s "Duplicate file found ${DATE}" ti@allegisgroup.com