См. функцию parse_fs_type
в mke2fs.c
:
.
-t
), используйте это mke3fs
, используйте «ext3»; mke4fs
, используйте «ext4»; mkfs.
, используйте суффикс; /etc/mke2fs.conf
, если таковое имеется; Результирующая текстовая строка используется для поиска определения файловой системы в /etc/mke2fs.conf
(, за исключением «ext2», который обрабатывается внутри ).
Таким образом, ваш mkmk
будет использовать тип файловой системы ext2.
shopt -s nullglob
set -- "$WORK_DIR/$SRC_FILE_EXT"*
printf 'There are %d names that match "%s"\n' "$#" "$WORK_DIR/$SRC_FILE_EXT*"
То есть разверните шаблон, соответствующий интересующим вас именам, задав позиционные параметры. Специальная переменная $#
будет содержать количество совпавших имен. Установите параметр оболочки nullglob
в bash
, чтобы шаблон не расширялся, если он вообще не совпадает.
Если вы хотите убедиться, что каталоги не совпадают, вы можете использовать простой цикл, который подсчитывает не -каталоги:
shopt -s nullglob
num=0
for name in "$WORK_DIR/$SRC_FILE_EXT"*; do
[ ! -d "$name" ] && num=$(( num + 1 ))
done
printf 'There are %d non-directories with names that match "%s"\n' "$num" "$WORK_DIR/$SRC_FILE_EXT*"
Использованиеfind
:
find "$WORK_DIR" -maxdepth 1 ! -type d -name "$SRC_FILE_EXT*" -exec echo x \; | wc -l
(предполагая, что ваш find
знает о не -стандартном -maxdepth
предикате ). Это вернет количество не -каталогов в $WORK_DIR
, имена которых начинаются с $SRC_FILE_EXT
.
num=$( find "$WORK_DIR" -maxdepth 1 ! -type d -name "$SRC_FILE_EXT*" -exec echo x \; | wc -l )
printf 'There are %d non-directories with names that match "%s" in "%s"\n' \
"$num" "$SRC_FILE_EXT*" "$WORK_DIR"
Существует тонкое различие между использованием глобусов оболочки для сопоставления имен и использованием find
в том, что find
более строго относится к сопоставлению типов файлов. Утилита find
обнаружит символическую ссылку на файл или каталог не как файл или каталог, а как символическую ссылку, в то время как оболочка будет разыменовывать символическую ссылку и проверять то, на что она ссылается.
Поскольку вы говорите о «файлах» во множественном числе и префиксе, я предполагаю, что имена файлов содержат $SRC_FILE_EXT
с чем-то после него, поэтому вам понадобится шаблон подстановки, например $SRC_FILE_EXT*
.
Но это может дать вам несколько совпадений, в то время как test -s
принимает только один аргумент.
Поэтому я предлагаю изменить ваш тест на
if [ "$(find. -name \"${WORK_DIR}/${SRC_FILE_EXT}*\" )" != "" ]; then