mirror of
https://github.com/jarun/nnn.git
synced 2024-12-01 02:49:44 +00:00
7f5dbd11e3
With this enhancement, plugins which operate on selection can explicitly request the program to clear the selection.
72 lines
2.2 KiB
Bash
Executable file
72 lines
2.2 KiB
Bash
Executable file
#!/usr/bin/env sh
|
|
|
|
# Description: Create and verify checksums
|
|
#
|
|
# For selection: it will generate one file containing the checksums with file names
|
|
# [and with paths if they are in another directory]
|
|
# the output checksum filename will be checksum_timestamp.checksum_type
|
|
# For file: if the file is a checksum, the plugin does the verification
|
|
# if the file is not a checksum, checksum will be generated for it
|
|
# the output checksum filename will be filename.checksum_type
|
|
# For directory: recursively calculates checksum for all the files in the directory
|
|
# the output checksum filename will be directory.checksum_type
|
|
#
|
|
# Shell: POSIX compliant
|
|
# Authors: ath3, Arun Prakash Jana
|
|
|
|
selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
|
resp=f
|
|
chsum=md5
|
|
|
|
checksum_type()
|
|
{
|
|
echo "possible checksums: md5, sha1, sha224, sha256, sha384, sha512"
|
|
printf "create md5 (m), sha256 (s), sha512 (S) (or type one of the above checksums) [default=m]: "
|
|
read -r chsum_resp
|
|
for chks in md5 sha1 sha224 sha256 sha384 sha512
|
|
do
|
|
if [ "$chsum_resp" = "$chks" ]; then
|
|
chsum=$chsum_resp
|
|
return
|
|
fi
|
|
done
|
|
if [ "$chsum_resp" = "s" ]; then
|
|
chsum=sha256
|
|
elif [ "$chsum_resp" = "S" ]; then
|
|
chsum=sha512
|
|
fi
|
|
}
|
|
|
|
if [ -s "$selection" ]; then
|
|
printf "work with selection (s) or current file (f) [default=f]: "
|
|
read -r resp
|
|
fi
|
|
|
|
if [ "$resp" = "s" ]; then
|
|
checksum_type
|
|
sed 's|'"$PWD/"'||g' < "$selection" | xargs -0 -I{} ${chsum}sum {} > "checksum_$(date '+%Y%m%d%H%M').$chsum"
|
|
|
|
# Clear selection
|
|
if [ -p "$NNN_PIPE" ]; then
|
|
printf "-" > "$NNN_PIPE"
|
|
fi
|
|
elif [ -n "$1" ]; then
|
|
if [ -f "$1" ]; then
|
|
for chks in md5 sha1 sha224 sha256 sha384 sha512
|
|
do
|
|
if echo "$1" | grep -q \.${chks}$; then
|
|
${chks}sum -c < "$1"
|
|
read -r _
|
|
return
|
|
fi
|
|
done
|
|
checksum_type
|
|
file=$(basename "$1").$chsum
|
|
${chsum}sum "$1" > "$file"
|
|
elif [ -d "$1" ]; then
|
|
checksum_type
|
|
file=$(basename "$1").$chsum
|
|
find "$1" -type f -exec ${chsum}sum "{}" + > "$file"
|
|
fi
|
|
fi
|