как заменить «/» в имени файла на «_»

По умолчанию в 'yum list' без каких-либо опций будут перечислены все пакеты во всех репозиториях и все пакеты, установленные в вашей системе. Примечание. 'Yum list all' и 'yum list' дают одинаковый результат.

1
17.05.2017, 16:26
2 ответа

Это выглядит странно:

backup_`echo`mv "$i" "${i//"/"/_}``_`hostname`.`date +%m.%d.%Y`.tar.gz 

Вы пытаетесь вложить mv в эхо здесь? Синтаксис $(...) для подстановки команд упростил бы вложение:

backup_$(echo $(mv this that))_$(hostname)...

Но я все еще не вижу здесь никакого применения для mv, не говоря уже о echo, который будет просто повторять то, что выводит mv, и не должен ничего выводить, если работает.

Мы можем просто исключить mv и построить имя файла с ${var//\//_}, что изменит все экземпляры / в переменной с _.

Возможно, что-то вроде этого для всего цикла:

for path in /var /usr/image /usr/image/temp ; do
    x=$(path#/}                      # remove leading / if there is one
    tarfile=backup_${x//\//_}_$(hostname)_$(date +%Y-%m-%d).tar.gz
    tar -cvpzf "$tarfile" "$path"
done

Примечание. Я изменил формат даты с 05-17-2017 на 2017-05-17, потому что последнее облегчает сортировку. Удаление ведущего / является излишним, поскольку оно превратится в _, что мы и так хотели, но я нахожу это несколько более структурированным.

3
27.01.2020, 23:14

Вы должны быть осторожны с побегом. Использование:

"${i//\//_}"
3
27.01.2020, 23:14

Теги

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