Переименовать несколько файлов, удалив все, кроме одного экземпляра шаблона

gparted может это легко сделать. Кстати, если вы не знаете, вам нужно перезагрузиться на Live CD / USB, потому что gparted не может безопасно перемещать или изменять размер файловых систем, которые смонтированы как RW и активно используются. Он не может перемещать или изменять размер раздела, из которого он запущен. http://gparted.org/ содержит загружаемые образы ISO для компакт-дисков и USB-накопителей.

в любом случае, вот процедура:

  1. Сжать / dev / sda2 на 2G
  2. переместить / dev / sda2 , чтобы создать 2 ГБ свободного места между sda1 и sda2
  3. изменяют размер / dev / sda1 и дают ему дополнительные 2 ГБ

. Обратите внимание, что шаг 2 включает перемещение каждого байта / dev / sda2. Это может занять много времени.

Кстати, вам действительно нужно 8 ГБ пространства подкачки? например у вас 8 ГБ ОЗУ, и вы используете приостановку на диск. Если вы действительно так много меняете местами, правильным решением будет добавить в систему больше оперативной памяти. Если вы не выполняете приостановку на диск, вам может быть лучше сделать это:

  1. сжать / dev / sda3 на 4 ГБ
  2. , возможно, сжать / dev / sda2 на 2 ГБ или более
  3. переместите / dev / sda2 так, чтобы он совпал с / dev / sda3
  4. resize / dev / sda1 , чтобы добавить 4 или 6 ГБ или больше.

Однако в долгосрочной перспективе лучше всего заменить этот 120 ГБ sda (твердотельный накопитель?) На твердотельный накопитель емкостью 256 или 512 ГБ или больше. В последнее время они стали намного дешевле, и в ближайшем будущем цены, вероятно, снова резко упадут.Если / когда вы это сделаете, не совершайте ошибку, снова создавая крошечные rootfs - если вы не можете выделить как минимум 20-50 ГБ для root (в зависимости от того, какое программное обеспечение вам нужно установить), тогда не используйте отдельный / home раздел, только один большой раздел / .

4
27.09.2017, 20:24
2 ответа

Самый простой способ — сначала удалить все экземпляры XYZ12-и заменить первый -на-XYZ12-:

$ echo 20170223_LibError.log-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-SAE066.log_compressed_at_2017-09-27_03-32-55.gz | sed -E 's,XYZ12-,,g' | sed 's,-,-XYZ12-,'
20170223_LibError.log-XYZ12-SAE066.log_compressed_at_2017-09-27_03-32-55.gz

РЕДАКТИРОВАТЬ:Если вы не знаете XYZ12заранее, вы можете извлечь его, используя cut. Например, создайте do.shтакой скрипт:

#!/usr/bin/env sh

pattern=$(echo "$1" | cut -d- -f2)

echo "$1" | sed -E "s,$pattern-,,g" | sed "s,-,-$pattern-,"

Использование:

$./do.sh  20170223_LibError.log-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-SAE066.log_compressed_at_2017-09-27_03-32-55.gz
20170223_LibError.log-XYZ12-SAE066.log_compressed_at_2017-09-27_03-32-55.gz

И с другим узором:

$./do.sh  20170223_LibError.log-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-SAE066.log_compressed_at_2017-09-27_03-32-55.gz
20170223_LibError.log-NMNM-SAE066.log_compressed_at_2017-09-27_03-32-55.gz
1
27.01.2020, 20:47

Или вы можете попробовать:

find. -type f -name "*-XYZ12*" | sed 'p;s/\(-XYZ12\)\{1,\}/-XYZ12/' | xargs -n2 mv

См. тему

2
27.01.2020, 20:47

Теги

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