You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.5 KiB
46 lines
1.5 KiB
#!/bin/sh |
|
|
|
# This spell enchants the specified file with the given attribute and value. |
|
# If the attribute already exists, it is overwritten. |
|
# If the file or attribute does not exist, it raises an error. |
|
|
|
# Check that the correct number of arguments was provided |
|
if [ $# -lt 3 ] | [ $# -gt 4 ]; then |
|
echo "Error: This spell requires three or four arguments: a file path, an attribute name, and a value." |
|
exit 1 |
|
fi |
|
|
|
# Set the file path, attribute name, and attribute value variables |
|
file=$1 |
|
attribute=$2 |
|
value=$3 |
|
|
|
# Check that the file exists |
|
if [ ! -f "$file" ] && [ ! -d "$file" ]; then |
|
echo "Error: The file does not exist." |
|
exit 1 |
|
fi |
|
|
|
# Define a function to set the attribute value using the available commands |
|
set_attribute_value() { |
|
# Try to set the attribute using the 'attr' command |
|
attr -s "$1" -V "$2" "$3" 2>&1 >/dev/null || |
|
|
|
# If the 'attr' command is not available, try using the 'xattr' command |
|
xattr -w "$1" "$2" "$3" 2>&1 > /dev/null || |
|
|
|
# If the 'xattr' command is not available, try using the 'setfattr' command |
|
setfattr -n "$1" -v "$2" "$3" 2>&1 > /dev/null || |
|
|
|
# If none of the commands are available, raise an error |
|
( |
|
echo "Error: This spell requires the 'attr', 'xattr', or 'setfattr' command to be installed." |
|
exit 1 |
|
) |
|
} |
|
|
|
# Set the attribute value using the set_attribute_value function |
|
value=$(printf "%q\n" "$value") |
|
set_attribute_value "$attribute" "$value" "$file" |
|
|
|
echo "The file has been enchanted with the attribute '$attribute' and value '$value'."
|
|
|