удаление парных дубликатов файлов

вы можете немного проанализировать возвращаемые htms целевой страницы и немного поиграть с утилитами bash. Это должно сработать:

for i in $(curl https://sourceforge.net/projects/geoserver/files/GeoServer/2.10.1/extensions/  | grep net.sf.files | awk -F "=" '{print $2}' | jq '.[].full_path' | awk -F '"' '{printf("https://sourceforge.net/projects/geoserver/files/%s\n",$2)}') ; do curl -o $(echo $i | awk -F '/' '{print $NF}') -L ${i} ; done
1
17.03.2017, 12:57
3 ответа

Можно сделать что-то вроде

  ls *.txt | awk -F '[.-]' '{ if (f[$2,$1]) { print $0; }
                              else { f[$1,$2] = 1} }' | xargs rm

Это работает следующим образом: передайте имена соответствующих файлов в awk. Для каждого файла проверьте, не был ли файл с обратным именем уже занесен в массив f. Если да, выведите имя файла. Если нет, поместите его в массив f. Используйте вывод программы awk для удаления дубликатов файлов.

2
27.01.2020, 23:34

Вы можете использовать find и извлечь части до и после тире из имени файла, проверить, существует ли эта пара, и если да, то удалить соответствующий файл:

find . -name \*-\*.txt -execdir sh -c 'fn=${1##*/};bn=${fn%.*};one=${bn%-*};
two=${bn#*-};pair=${two}-${one}.txt; [[ -f $pair ]] && rm "$1"' boom {} \;

То же самое можно сделать с помощью цикла for (и при условии, что оболочка поддерживает рекурсивный globbing):

# if you're using bash run
shopt -s globstar

then

for f in **/*-*.txt; do
dn=${f%/*}; fn=${f##*/}; bn=${fn%.*}; one=${bn%-*}; two=${bn#*-};
pair=${dn}/${two}-${one}.txt; [[ -f $pair ]] && rm -- "$f"; done
0
27.01.2020, 23:34
find . -type d -exec \
   perl -wMstrict -le '
      (local $", my $top) = ("", $ENV{PWD});
      for my $curdir ( @ARGV ) {
         my %h;
         chdir $curdir;
            for ( <*.txt> ) {
               my @pair = /^([^-]+)-([^.]+)[.]txt$/;
               next unless @pair;
               $h{ "@pair" }++;
               unlink if exists $h{ "@{[reverse @pair]}" };
            }
         chdir $top;
      }
   ' {} +

sed

/bin/ls -1 |
sed -ne '
   1H;1d
   G
   /^\([^-]*\)-\([^.]*\).txt\n\(.*\n\)\{0,1\}\2-\1.txt$/P
   /^\([^-]*\)-\([^.]*\).txt\n\(.*\n\)\{0,1\}\2-\1.txt\n/P
   s/\n\n.*//;H
' | xargs rm
0
27.01.2020, 23:34

Теги

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