Bash Скрипт для поиска дубликатов имен файлов в том же каталоге и отправки уведомлений по электронной почте - PullRequest
0 голосов
/ 03 марта 2020

Моя цель - найти дубликаты имен файлов, сравнив все имена файлов (ab c .xyz, def.csv) в одном каталоге. если нет повторяющихся имен файлов, переместите все эти файлы (.csv, .xlsx) по указанному пути к файлу в путь к архиву.

Если есть дубликаты имен файлов, извлеките имена этих дубликатов имен файлов. только с их измененной временной датой и отправьте уведомление по электронной почте команде и переместите оставшиеся неповторяющиеся имена файлов в папку архива.

Как вы можете видеть, я пытаюсь добиться этого с помощью следующего кода.

если команда find пуста, выполните условие if, выполните команду mv и полностью выйдите из сценария, если они являются дублирующимися файлами, затем выйдите из условия if и передайте дубликаты файлов и выполните почту и дату Операция печати. ​​

Тем не менее, код, который на самом деле делает, отправляет уведомление по электронной почте, если он находит или не находит дубликаты файлов.

, если есть дубликаты файлов, затем отправьте письмо с дубликатом имена файлов и имя модификации, если нет повторяющихся имен файлов, то это поиск имени файла как пустого и текущего времени как измененного времени.

в настоящее время нет файлов вне архива (только файлы внутри архива, но все файлы внутри архива уникальны и выглядят хорошо), поэтому технически это не должно отправить любое уведомление по электронной почте.

sourcefolder

data source inside archive

{
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@gmail.com

1 Ответ

0 голосов
/ 03 марта 2020

найти дубликаты имен файлов, сравнив все имена файлов (ab c .xyz, def.csv) в одном каталоге.

его расширения .xlsx и .csv

Я предполагаю, что в именах файлов нет пробелов

IFS=$'\n'

duplicates=($(
       find . -maxdepth 1 -type f '(' -name '*.xlsx' -o -name '*.csv' ')' \
           -exec bash -c 'printf "%s %s\n" "$1" "${1%.*}"' -- {} \; |
       sort -k1 |
       uniq -f1 -d |
       cut -d' ' -f2
))
# or simpler:
duplicates=($(
    find . -type f '(' -name '*.xlsx' -o -name '*.csv' ')' |
    sed 's/\.[^\.]*$//' |
    sort |
    uniq -d
))

IFS=$' \t\n'

#, если их нет любые дубликаты имен файлов затем перемещают все эти файлы (.csv, .xlsx) по указанному пути к файлу в путь к архиву

if ((${#duplicates[@]} == 0)); then
    find . -type f '(' -name '*.xlsx' -o -name '*.csv' ')' \
         -exec mv -v {} "$the_archive_path" \;

# Если есть дубликаты имен файлов, то

else

# извлекать имена этих повторяющихся имен файлов только с их измененной отметкой времени

    duplicate_filenames_with_modified_date=$(
       {
          printf "%s.xlsx\n" "${duplicates[@]}"
          printf "%s.csv\n" "${duplicates[@]}"
       } |
       xargs -d$'\n' stat -c '%n %y\n'
    )

# и отправлять уведомление по электронной почте команде и

    mail the_team <<<"a notification email"

# переместите оставшиеся неповторяющиеся имена файлов в папку архива.

    find . -maxdepth 1 -type f '(' -name '*.xlsx' -o -name '*.csv' ')' \
           -exec bash -c 'echo "$1" "${1%.*}"' -- {} \; | tee /dev/stderr |
       sort -k2 |
       uniq -f1 -u |
       cut -d' ' -f1 |
       xargs -r -d$'\n' -I{} echo mv -v {} "$the_archive_folder"
fi
...