Найдите разницу в именах файлов между двумя каталогами (игнорируя расширение имени файла)

Таблица разделов на самом деле представляет собой просто часть данных, которая говорит о таких вещах, как

  • Раздел 1 начинается с дорожки 10 и заканчивается на дорожке 99
  • Раздел 2 начинается с дорожки 100 и заканчивается на дорожке 599
  • Раздел 3 начинается с дорожки 600 и заканчивается на дорожке 16383

Если удалить таблицу разделов, то данные в дорожках 10 ->99, 100 ->599, 600 ->16383 остаются нетронутыми, просто ОС уже не знает, как их найти. Поэтому, если вы затем воссоздаете таблицу разделов точно так же, ваши данные все еще будут доступны. Я использовал это в 2016 году, когда по ошибке уничтожил все свои таблицы разделов (https://www.sweharris.org/post/2016-02-10-break-mbr/)

.

Если вы хотите также удалить данные внутри разделов, вам нужно либо обнулить весь диск, либо отформатировать разделы.У большинства установщиков есть возможность сказать «форматировать раздел», когда вы выполняете настройку.

Или убедитесь, что ваши разделы начинаются в разных местах (, например, 9 ->100, 101 ->600, 601 ->16384 ), чтобы данные внутри не выглядели как файловая система.

1
11.05.2020, 04:59
2 ответа

С zshвместоbash:

regular=(regular/*.txt(N:t))
compressed=(compressed/*.txt.bz2(N:t:r))
print -r Only in regular: ${regular:|compressed}
print -r Only in compressed: ${compressed:|regular}

Тогда можно:

for f (${regular:|compressed}) bzip2 -c regular/$f > compressed/$f.bz2

Это использование оператора вычитания массива ${A:|B}(расширяется до элементовAbar (, исключая )элементы изB).

С помощью bashи инструментов GNU:

(
  export LC_ALL=C
  shopt -s nullglob
  comm -z23 <(cd regular && set -- *.txt && (($#)) && printf '%s\0' "$@") \
            <(cd compressed && set -- *.txt.bz2 && (($#)) &&
               printf '%s\0' "${@%.bz2}")
) |
  while IFS= read -rd '' f; do
    bzip2 -c "regular/$f" > "compressed/$f.bz2"
  done

Затем выполняется вычитание с помощью команды comm. Здесь используются разделители NUL, чтобы иметь возможность справляться с произвольными именами файлов, как в решении zsh.

1
28.04.2021, 23:15

просто измените путь к каталогу без "/" в конце, надеюсь, это поможет!

#!/bin/bash

path_input=/tmp/regular
path_compressed=/tmp/compressed
compressed_ext='.bz2'

echo "Starting backup..."
#List files and check if they are compressed
for file in `ls -1 $path_input/*.txt`; do

    #Compressed file search
    search_compressed=`sed "s;"$path_input";"$path_compressed";g" <<< $file$compressed_ext`

    if [[ ! -f $search_compressed ]]
        #Compress file
        then
            echo "Compressing $file"
            bzip2 --keep --force "$file"
            mv -f "$file$compressed_ext" "$path_compressed"
    fi
done

echo "Done"
0
28.04.2021, 23:15

Теги

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