Поскольку используемые здесь диапазоны имеют фиксированную длину, вы можете просто записать весь диапазон [0-9]{3}
=> [0-9][0-9][0-9]
. И вместо (| |-|.)
,( |-|.)?
-хотя я запутался :вы разрешаете любой символ (.
), кроме пробела и -
? Тогда это может быть просто .?
, поскольку пробел и -
в любом случае совпадают с .
. Если вы сопоставляете литеральную точку .
, то вы должны использовать [-.]?
вместо (, ведущее -
, чтобы избежать интерпретации как диапазона символов ). Так:
^\(?0[1-9]{2}\)?(| |-|.)[1-9][0-9]{3}( |-|.)[0-9]{4}$
Становится:
^\(?0[1-9][1-9]\)?[-.]?[1-9][0-9][0-9][0-9][-.][0-9][0-9][0-9][0-9]$
Вы можете циклически просматривать содержимое/home
cd /home
for file in */; do tar czf /backup/"$file".tar.gz "$file";done