Conzsh
:
# all *.<number>.py files in "n"umerical order
files=(*-<->.py(n))
# associative array whose key is the part before the last "-"
typeset -A latest
for f ($files) latest[${f%-*}]=$f
# plain array with the values of the associative array
keep=($latest)
# array subtraction:
echo rm -- ${files:|keep}
(quitar echo
si feliz ).
Eso no hace ninguna suposición sobre qué caracteres pueden contener el resto de los nombres de archivo. Conbash
(o zsh
oksh
)y herramientas GNU:
xargs -r0a <(printf '%s\0' *-*.py |
grep -zEe '-[[:digit:]]+\.py$' |
sort -zrV |
awk -vRS='\0' -vORS='\0' '
{key = $0; sub(/-[^-]*$/, "", key)}
seen[key]++') echo rm --
Вы можете сделать это, например, с помощью анлайнера, как этот:
while read -r WORKSTATION; do echo "$WORKSTATION" "$(grep "$(basename "$WORKSTATION" | head -c 3)" "$TO_FILE_PATH" | cut -d' ' -f2)"; done < from_file
Его вывод будет:
/Workstation/Build/red-001 /Workstation/Staff/Red
/Workstation/Build/sci-001 /Workstation/Staff/Sci
/Workstation/Build/shs-001 /Workstation/Staff/Shs
WORKSTATION
— это просто имя переменной, которая будет содержать путь каждой рабочей станции для каждой итерации цикла while. TO_FILE_PATH
— путь к этому файлу:
red /Workstation/Staff/Red
sci /Workstation/Staff/Sci
shs /Workstation/Staff/Shs
и from_file
, это файл, который содержит этот:
/Workstation/Build/red-001
/Workstation/Build/sci-001
/Workstation/Build/shs-001
Или вы можете использовать сценарий bash, move_worksations.sh
, как этот:
FROM_FILE_PATH="$1"
TO_FILE_PATH="$2"
WORKSTATION_NUMBER=0
while read -r WORKSTATION
do
WORKSTATIONS["$WORKSTATION_NUMBER"]=""$WORKSTATION" "$(grep "$(basename "$WORKSTATION" | head -c 3)" "$TO_FILE_PATH" | cut -d' ' -f2)""
((WORKSTATION_NUMBER++))
done < "$FROM_FILE_PATH"
for WS_SOURCE_TARGET in "${WORKSTATIONS[@]}"
do zman wmv "$WS_SOURCE_TARGET"
done
Затем вы используете move_worksations.sh
, таким образом:
./move_worksations.sh from_file to_file
Примечание :не забудьте дать move_worksations.sh
разрешение на выполнение:chmod u+x move_worksations.sh