blob: 1b16bad35126f722ba70162c5c94758e0fdb2654 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
#!/usr/bin/env bash
# Module: fs
# Description: Operaciones remotas sobre ficheros (mover, renombrar, copiar, borrar, truncar)
# License: GPLv3
# Author: Luis GuLo
# Version: 1.3.0
# Dependencies: ssh
fs_task() {
local host="$1"; shift
declare -A args
local files=()
# 🌐 Cargar traducciones
local lang="${shflow_vars[language]:-es}"
local trfile="$(dirname "${BASH_SOURCE[0]}")/fs.tr.${lang}"
declare -A tr
if [[ -f "$trfile" ]]; then
while IFS='=' read -r k v; do tr["$k"]="$v"; done < "$trfile"
fi
# Parseo de argumentos
for arg in "$@"; do
key="${arg%%=*}"
value="${arg#*=}"
if [[ "$key" == "files" ]]; then
if [[ "$value" == *'*'* || "$value" == *'?'* || "$value" == *'['* ]]; then
mapfile -t files < <(ssh "$host" "ls -1 $value 2>/dev/null")
else
IFS=',' read -r -a files <<< "$value"
fi
else
args["$key"]="$value"
fi
done
local action="${args[action]}"
local src="${args[src]}"
local dest="${args[dest]}"
local path="${args[path]}"
local become="${args[become]}"
local prefix=""
[ "$become" = "true" ] && prefix="sudo"
case "$action" in
move|rename|copy)
if [[ ${#files[@]} -gt 0 ]]; then
for file in "${files[@]}"; do
base="$(basename "$file")"
target="$dest/$base"
cmd="$prefix mv"; [[ "$action" == "copy" ]] && cmd="$prefix cp"
ssh "$host" "$cmd '$file' '$target'" && echo "$(render_msg "${tr[action_ok]}" "action=$action" "src=$file" "dest=$target")"
done
else
cmd="$prefix mv"; [[ "$action" == "copy" ]] && cmd="$prefix cp"
ssh "$host" "$cmd '$src' '$dest'" && echo "$(render_msg "${tr[action_ok]}" "action=$action" "src=$src" "dest=$dest")"
fi
;;
delete|truncate)
if [[ ${#files[@]} -gt 0 ]]; then
for file in "${files[@]}"; do
cmd="$prefix rm -f"; [[ "$action" == "truncate" ]] && cmd="$prefix truncate -s 0"
ssh "$host" "$cmd '$file'" && echo "$(render_msg "${tr[action_ok]}" "action=$action" "src=$file")"
done
else
cmd="$prefix rm -f"; [[ "$action" == "truncate" ]] && cmd="$prefix truncate -s 0"
ssh "$host" "$cmd '$path'" && echo "$(render_msg "${tr[action_ok]}" "action=$action" "src=$path")"
fi
;;
*)
echo "$(render_msg "${tr[unsupported]}" "action=$action")"
return 1
;;
esac
}
check_dependencies_fs() {
local lang="${shflow_vars[language]:-es}"
local trfile="$(dirname "${BASH_SOURCE[0]}")/fs.tr.${lang}"
declare -A tr
if [[ -f "$trfile" ]]; then
while IFS='=' read -r k v; do tr["$k"]="$v"; done < "$trfile"
fi
if ! command -v ssh &> /dev/null; then
echo "${tr[missing_deps]:-❌ [fs] ssh no está disponible.}"
return 1
fi
echo "${tr[deps_ok]:-✅ [fs] ssh disponible.}"
return 0
}
|