Я предполагаю, что ваши имена файлов не содержат встроенных символов новой строки.
В Linux:
#! /usr/bin/env bash
find /some/dir -type f -maxdepth 1 \! -name '*.gpg' | \
while read -r f; do
esc=${f##*/}
esc=${esc//\\/\\\\}
esc=${esc//\"/\\\"}
md5=$(md5sum "$f".gpg | awk '{print $1}')
printf '"%s" "%d" "%d" "%s"\n' "$esc" $(stat -c %s "$f") $(stat -c %s "$f".gpg) "$md5"
done
В *BSD:
#! /bin/sh
find /some/dir -type f -maxdepth 1 \! -name '*.gpg' | \
while read -r f; do
esc=$(printf '%s\n' "$f" | sed 's#.*/##; s/\([\\"]\)/\\\1/g')
md5=$(md5 -q "$f".gpg)
printf '"%s" "%d" "%d" "%s"\n' "$esc" $(stat -f %z "$f") $(stat -f %z "$f".gpg) "$md5"
done
На тривиальном уровне я не совсем уверен, почему этого недостаточно.
[[ -s "/scripts/pid_$DATE.txt" ]] && kill $(cat "/scripts/pid_$DATE.txt")
Или нужно убить только первого, а остальных оставить в покое?
if [[ -s "/scripts/pid_$DATE.txt" ]]
then
while IFS= read -r pid
do
kill "$pid" && break
done <"$scripts/pid_$DATE.txt"
fi
В обоих случаях предполагается, что сценарий имеет достаточные привилегии, чтобы сигнализировать целевым процессам, и что файл "$scripts/pid_$DATE.txt"
либо не существует, либо является доверенным и датирован с -по -.
Не совсем понятно, но "убить" не застревает, так что,
while read pid; do kill "$pid"; done < "/scripts/pid_$DATE.txt"
или добавьте -9, чтобы убить, чтобы принудительно убить ваш процесс