Это должно позаботиться о том, что вы хотите, и добавит _05042018
ко всем каталогам, подпадающим под archive
, когда они включают wrm6.
sed -i -E "s/(.*wrm6[[:space:]]+\/archive\/)(.+)([[:space:]]+NFS.*)/\1\2_05042018\3/g" /etc/fstab
Следующий скрипт будет
/etc/fstab
файла и, наконец, /etc/fstab
. Я бы рекомендовал запустить его на копии файла fstab
несколько раз, чтобы убедиться, что он работает в вашей системе. Просто измените переменную fstab
в верхней части скрипта, чтобы она указывала на другой файл.
Только скрипт добавляет суффикс к точке монтирования. Он не пытается удалить его, если он там уже есть.
#!/bin/sh
set -e # terminate on errors (don't remove!)
fstab='/etc/fstab' # these could be made command line arguments
device_pattern='^NAS[0-9]:/vol/wrm6' # but I kept them like this for simplicity
dir_pattern='^/archive/'
suffix='_05042018'
# Check for non-existing mount points
awk -v suf="$suffix" -v dev="$device_pattern" -v dir="$dir_pattern" \
'$1 ~ dev && $2 ~ dir { print NR, $1, $2 suf }' "$fstab" |
while read lineno device mtpoint; do
if [ ! -d "$mtpoint" ]; then
printf 'Mount point "%s" for "%s" is missing on line %d of %s\n' \
"$mtpoint" "$device" "$lineno" "$fstab" >&2
#exit 1
fi
done
# Make backup
bkname="$fstab-backup.$(date +%F_%H%M%S)"
cp "$fstab" "$bkname"
# Modify file
awk -v suf="$suffix" -v dev="$device_pattern" -v dir="$dir_pattern" \
'$1 ~ dev && $2 ~ dir { $2 = $2 suf } 1' "$bkname" >"$fstab"
echo 'Done.'
echo 'New fstab:'
cat "$fstab"
"Не удалять!" комментарий реальный. Если set -e
удалить, то скрипт не завершится, если будет найдена недопустимая точка монтирования (, по крайней мере, при работе под bash
илиpdksh
).