Как сравнить два имени файла

e2image можно использовать для создания образа файловой системы ext4, при этом копируются только те сектора, которые используются:

e2image -ra /dev/sda1 /path/to/file.img

file.imgбудет создан как разреженный файл, поэтому он будет занимать только то пространство, которое действительно используется в файловой системе, хотя его видимый размер будет отражать емкость файловой системы.

Вы также можете использовать e2imageдля создания изображения QCOW2:

e2image -Qa /dev/sda1 /path/to/file.qcow2

Это создаст компактный файл, который все еще можно смонтировать.

Оба изображения могут быть сжаты, хотя в результате получается файл, который нельзя смонтировать напрямую.

1
27.11.2021, 01:26
1 ответ

Я предлагаю вам сделать что-то вроде следующего:

Я создал каталог с некоторыми файлами с «нормальной» датой -вроде имен, один файл с пробелом в имени (требует цитирования )и один файл с новой строкой -в имя (может вызвать проблемы, если используемые вами команды предполагают, что новые строки -разделяют файлы ).

$ find
.
./20210710.txt
./20200131.txt
./20210611.txt
./2020?0131.txt
./20201131.txt
./2020 131.txt

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

$ find -name '*.txt' -exec stat -c '%N' {} \;
'./20210710.txt'
'./20200131.txt'
'./20210611.txt'
'./2020'$'\n''0131.txt'
'./20201131.txt'
'./2020 131.txt'

Теперь сортировать его (можно без удаления расширения)

$ find -name '*.txt' -exec stat -c '%N' {} \; | sort
'./20200131.txt'
'./20201131.txt'
'./2020 131.txt'
'./2020'$'\n''0131.txt'
'./20210611.txt'
'./20210710.txt'

и выберите самый старый (вверху списка)

$ find -name '*.txt' -exec stat -c '%N' {} \; | sort | head -n1
'./20200131.txt'

Теперь вы можете удалить этот файл,

rm $(find -name '*.txt' -exec stat -c '%N' {} \; | sort | head -n1)

Если существует риск того, что будет пробел или другой специальный символ, вы хотите заключить его в кавычки (, но внимательно проверьте, чтобы избежать конфликтов с предыдущим цитированием)

rm "$(find -name '*.txt' -exec stat -c '%N' {} \; | sort | head -n1)"

Вы также можете установить переменную и использовать ее в командах позже в сценарии оболочки

#!/bin/bash

find -name '*.txt' -exec stat -c '%N' {} \; | sort

var1=$(find -name '*.txt' -exec stat -c '%N' {} \; | sort | head -n1)
echo '---'
read -p "Remove $var1? (y/N) " ans
if [ "$ans" == "y" ]
then
 eval rm "$var1"
fi
0
27.11.2021, 19:57

Теги

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