Рекурсивно удалить повторяющиеся строки из файлов, но оставить одну -Сделать строки уникальными в разных файлах

Просто в дополнение к ответу Тоуна ,

Для меня просто использовать их решение было недостаточно.

Когда я создал свои разделы с помощью fdisk, мне сначала пришлось создать новую пустую таблицу разделов GPT, затем раздел, затем файловую систему, а затем выполнить шаги, которые они предложили.

Весь процесс будет (осторожным, так как шаги, описанные ниже, удалят все данные в существующих разделах):

Шаг 0 :Сделайте резервную копию любых данных на диске, которые вы хотите сохранить.

  1. Узнайте имя устройства (в моем случае/dev/sdb)

    sudo fdisk -l
    
  2. Запустите fdiskна устройстве

    sudo fdisk /dev/sdb                     # replace b by your device letter.
  3. Удалить существующие разделы (повторить для всех имеющихся разделов)

    d
    
  4. Создайте новую пустую таблицу разделов GPT

    g
    
  5. Создать новый раздел

    n
    
  6. Выберите параметры. Я выбрал все параметры по умолчанию для нового раздела
  7. .
  8. Записать изменения в устройство

    w
    
  9. Записать новую файловую систему exFAT

    sudo mkfs.exfat -n my_label /dev/sdb1
  10. Конвертировать загрузочную запись в GPT (Ответ Тоуна)

    sudo gdisk /dev/sdb
    
  11. Просто напишите сразу

    w
    
  12. Примите, что вы можете потерять данные (сначала сделайте резервную копию)

    Y
    
  13. Установите данные msftdataв разделе exFAT (также взято из ответа Тоуна ). Поскольку у нас есть только один раздел, примените команду к разделу 1

    sudo parted /dev/sdb
    set 1 msftdata on
    q
    

3
15.07.2020, 16:39
1 ответ
#!/usr/bin/perl
use File::Find;
my $headdir="/some/path";
my @files=();
my $lines={};
find( { wanted => sub { push @files, $_ }, no_chdir => 1 }, $headdir );
foreach my $file (@files) {
  next unless(-f $file);
  system "cp $file $file". ".old";
  open(my $fhin, "$file".".old");
  open(my $fhout, ">$file");
  while(<$fhin>) {
    if(not defined $lines->{$_}) {
      print $fhout $_;
      $lines->{$_} = 1;
    }
  }
  close($fhin);
  close($fhout);
  #optional: system("rm $file".".old");
}

РЕДАКТИРОВАТЬ:(Протестировано только )с файлами, упомянутыми в вопросе, необходимо небольшое изменение кода

2
18.03.2021, 23:19

Теги

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