Конечно, вы можете копировать файлы напрямую из /home/user/whatever в /dev/sdb, если у вас есть права записи на необработанное устройство. Однако, поскольку теперь вы обходите файловую систему на этом устройстве, у вас будет просто поток байтов в /dev/sdb. Файловая система FAT, NTFS или ext4, которая была раньше, теперь исчезла, поскольку вы не прошли через драйвер файловой системы. Если вы смонтировали устройство перед копированием, драйвер позаботится о деталях файловой системы. Кроме того, вы не делаете двойную копию, поскольку каталог не существует независимо от устройства.
Если вы хотите сделать это в bash, это один из подходов:
IFS="." read -ra words <<<"$input"
if ((${#words[@]} == 3)) && [[ $input !=.* && $input != *. ]]; then
echo "valid input"
fi
Здесь на самом деле используются значения из массива слов:
IFS="." read -ra words <<<"$input"
# 3 dot-separated fields, and the first and last cannot be empty
if ((${#words[@]} == 3)) && [[ -n ${words[0]} && -n ${words[2]} ]]; then
echo "valid input"
fi
Я думаю, вы ищете это регулярное выражение ^[^.]\+\.[^.]\+\.[^.]\+$
, в этом примере мы будем использоватьgrep
:
Символы внутри квадратных скобок обрабатываются буквально (, за исключением -
), поэтому вам не нужно экранировать точку.
$ echo ".a.b.c." | grep "^[^.]\+\.[^.]\+\.[^.]\+$"
$ echo ".a.b.c" | grep "^[^.]\+\.[^.]\+\.[^.]\+$"
$ echo "a.b.c." | grep "^[^.]\+\.[^.]\+\.[^.]\+$"
$ echo "a..c" | grep "^[^.]\+\.[^.]\+\.[^.]\+$"
$ echo "a.b.c" | grep "^[^.]\+\.[^.]\+\.[^.]\+$"
a.b.c
Регулярное выражение говорит
^[^.]\+\.
, затем один или несколько символов, не являющихся точками, и точка [^.]\+\.
, за которыми следует один или несколько символов, не являющихся точками. не точки [^.]\+$
до конца строки. В awk мы можем сделать это:
$ awk ' $0"." ~ /^([^.]+\.){3}$/ ' file
a.b.c
abc.def.xyz
Добавление точки в конце делает шаблон повторяющимся, всего три раза not-dot
, за которым следует dot
. Подобно а.--б.--в. или абв.--опр.--хиз.
Или, говоря языком регулярных выражений,:([^.]\.){3}
Принимается только в том случае, если регулярное выражение соответствует всей строке.