zsh globbing - поиск файлов с повторяющимися строками имени файла

Это предполагает очень надежное появление ',' и '. ' символов в вашем CSV:

#!/bin/bash
cat "$1" | while IFS='' read -r line; do
    D="$(echo "$line" | cut -d ',' -f 1 | tr -d '"')"
    P="$(echo "$line" | cut -d '.' -f 2)"
    echo 'D: '"$D"
    echo 'P: '"$P"
    ./xyz --project "$P" --displayname "$D"
done
2
18.08.2017, 19:33
2 ответа

Вы можете сделать что-то вроде:

files=(<->v<->.txt(n))
typeset -A h
for f ($files) h[${f%%v*}]=$f
keep=($h)
echo rm ${files:|keep}

(удалить echoесли доволен)

  • <->:любая последовательность цифр(<x-y>оператор глобуса без указания границы)
  • (n):числовая сортировка
  • ${f%%v*}:стандартное/ksh удаление жадного шаблона с конца.
  • ${files:|keep}:вычитание массива.
4
27.01.2020, 21:58

Я не слишком хорошо знаком с оболочкой zsh, и я приду с приведенной ниже комбинацией команд awkс findи sort, которые выполняют сортировку файлов, найденных первыми, с естественными номерами (версий) в тексте изman sort .

Затем передать awkс определением -F'v'и добавить в массив на основе первой дублированной части имени файла (это гарантирует, что последняя часть сохраняется в массиве), поэтому команда, о которой я говорю, будет выглядеть следующим образом, чтобы получить файлы с большим числом v :

awk -F'v' '{U[$1]=$1"v"$2}END{for(x in U)print U[x]}' <(find . -type f|sort -V)
./012345v3.txt
./3333v7.txt
./11111v11.txt

Теперь у вас есть список файлов, которые вы должны сохранить, а остальные удалить.

0
27.01.2020, 21:58

Теги

Похожие вопросы