mke2fs -ответ на вопрос скрипта о перезаписи

Если файлы уже отсортированы приемлемым образом, вы можете объединить -отсортировать их, а затем uniqих:

sort -t_ -k2,2n -k3,3n -m -- *.txt | uniq > Unique_Position.txt

... который сортирует числовое значение по второму полю (с разделителями символами подчеркивания_)и, если эти ключи уникальны, по третьему полю. Результирующий вывод затем направляется через uniqперед перенаправлением в выходной файл.

С учетом (короткого )примера входных данных, приведенного выше, результаты:

chr1_1_200
chr1_200_400
chr1_600_800
chr1_1000_1200

Если вы можете полностью указать поля сортировки для строк, которые вы хотите сохранить,вы можете сделать все это в sort, добавив опцию -u:

sort -t_ -k1 -k2,2n -k3,3n -m -u *.txt > Unique_Position.txt

Это позволит сохранить уникальные строки среди трех перечисленных полей без необходимости вызыватьuniq(уведомление о добавлении опции -u). Эти поля сортировки должны соответствовать способу сортировки входных файлов.

1
10.10.2021, 23:32
1 ответ

В mkfs.ext4нет опции, говорящей о прекращении работы в случае обнаружения файловой системы. Вместо этого вам нужно выполнить эту проверку самостоятельно. (Я полагаю, что mkfs.ext4запрашивает подтверждение только в том случае, если стандартный ввод подключен к терминалу, а если нет, то он предполагает, что не получит ответа, поэтому все равно продолжает. Это был бы разумный подход, аналогичный lsи ls | catдля вывода разных макетов.)

Вот примеры запросов файловой системы устройства на Pi,

file -s /dev/mmcblk0p1
/dev/mmcblk0p1: DOS/MBR boot sector, code offset 0x3c+2, OEM-ID "mkfs.fat", sectors/cluster 16, root entries 512, Media descriptor 0xf8, sectors/FAT 32, sectors/track 63, heads 255, sectors 129024 (volumes > 32 MB), reserved 0x1, serial number 0x22e0c711, label: "boot       ", FAT (16 bit)

file -s /dev/mmcblk0p2
/dev/mmcblk0p2: Linux rev 1.0 ext4 filesystem data, UUID=202638e1-4ce4-45df-9a00-ad725c2537bb (needs journal recovery) (extents) (large files)

file -s /dev/mmcblk0p3
/dev/mmcblk0p3: LVM2 PV (Linux Logical Volume Manager), UUID: 40t385-3Q2C-u3Qz-TN5b-1fI1-0oYC-PsMQ3c, size: 27618967552

Существует довольно много возможных вариантов -значительно больше, чем я показал здесь -, поэтому, вероятно, проще искать «пустой» случай и продолжать только в том случае, если предполагаемое устройство соответствует этому. Для эксперимента вы можете использовать dd if=/dev/zeroили dd if=/dev/urandom, но оба имеют file -sвозврат dataв качестве типа файла :

.
dd if=/dev/zero bs=1M count=100 of=/tmp/100M.dat
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.487274 s, 215 MB/s

lodev=$(losetup --find --show /tmp/100M.dat ); echo $lodev
/dev/loop0

file -s $lodev
/dev/loop0: data

losetup -d $lodev
rm /tmp/100M.dat

Код может быть примерно таким:

#!/bin/sh
device=/dev/xvdf

magic=$(file -s "$device" 2>&1)
if [ "$magic" = "$device: data" ]
then
    # It isn't an obvious filesystem
    mkfs.ext4... "$device"
else
    # Uh oh
    printf "%s\n" "Cowardly refusing to create a filesystem on ${magic%%,*}" >&2
    exit 1
fi
1
11.10.2021, 08:20

Теги

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