Вы можете проверить свойство .length
объекта jQuery. Например:
if($("#two").length > 0) { // exists...
} else { // doesn't exist
}
Сначала получите имя файла без пути:
filename=$(basename -- "$fullfile")
extension="${filename##*.}"
filename="${filename%.*}"
В качестве альтернативы, вы можете сосредоточиться на последнем '/' пути вместо символа '.' который должен работать, даже если у вас есть непредсказуемые расширения файлов:
filename="${fullfile##*/}"
Вы можете проверить документацию:
~% FILE="example.tar.gz"
~% echo "${FILE%%.*}"
example
~% echo "${FILE%.*}"
example.tar
~% echo "${FILE#*.}"
tar.gz
~% echo "${FILE##*.}"
gz
Подробнее см. Расширение параметров оболочки в руководстве по Bash.
Я использую следующий скрипт
$ echo "foo.tar.gz"|rev|cut -d"." -f3-|rev
foo
pax> echo a.b.js | sed 's/\.[^.]*$//'
a.b
pax> echo a.b.js | sed 's/^.*\.//'
js
работает нормально, поэтому вы можете просто использовать:
pax> FILE=a.b.js
pax> NAME=$(echo "$FILE" | sed 's/\.[^.]*$//')
pax> EXTENSION=$(echo "$FILE" | sed 's/^.*\.//')
pax> echo $NAME
a.b
pax> echo $EXTENSION
js
Команды, кстати, работают следующим образом.
Команда для NAME
заменяет ] "."
символ, за которым следует любое количество символов, отличных от "."
, до конца строки, ни с чем (т. Е. Удаляет все из конечного "."
до конца строки включительно). По сути, это не жадная подстановка с использованием обмана регулярных выражений.
Команда для EXTENSION
заменяет любое количество символов, за которым следует символ "."
в начале строки , ни с чем (т. е. удаляет все от начала строки до последней точки включительно). Это жадная подстановка, которая используется по умолчанию.
Кажется, это не работает, если файл не имеет расширения или имени файла. Вот что я использую; он использует только встроенные команды и обрабатывает больше (но не все) патологических имен файлов.
#!/bin/bash
for fullpath in "$@"
do
filename="${fullpath##*/}" # Strip longest match of */ from start
dir="${fullpath:0:${#fullpath} - ${#filename}}" # Substring from 0 thru pos of filename
base="${filename%.[^.]*}" # Strip shortest match of . plus at least one non-dot char from end
ext="${filename:${#base} + 1}" # Substring from len of base thru end
if [[ -z "$base" && -n "$ext" ]]; then # If we have an extension and no base, it's really the base
base=".$ext"
ext=""
fi
echo -e "$fullpath:\n\tdir = \"$dir\"\n\tbase = \"$base\"\n\text = \"$ext\""
done
А вот несколько тестов:
$ basename-and-extension.sh / /home/me/ /home/me/file /home/me/file.tar /home/me/file.tar.gz /home/me/.hidden /home/me/.hidden.tar /home/me/.. . /: dir = "/" base = "" ext = "" /home/me/: dir = "/home/me/" base = "" ext = "" /home/me/file: dir = "/home/me/" base = "file" ext = "" /home/me/file.tar: dir = "/home/me/" base = "file" ext = "tar" /home/me/file.tar.gz: dir = "/home/me/" base = "file.tar" ext = "gz" /home/me/.hidden: dir = "/home/me/" base = ".hidden" ext = "" /home/me/.hidden.tar: dir = "/home/me/" base = ".hidden" ext = "tar" /home/me/..: dir = "/home/me/" base = ".." ext = "" .: dir = "" base = "." ext = ""
Просто используйте ${параметр%слово}
В вашем случае:
${FILE%.*}
Если вы хотите проверить это, то все нижеперечисленное работает, и просто удалите расширение:
FILE=abc.xyz; echo ${FILE%.*};
FILE=123.abc.xyz; echo ${FILE%.*};
FILE=abc; echo ${FILE%.*};
Меллен пишет в комментарии к сообщению в блоге:
Используя Bash, есть также $ {file%. *}
для получения имени файла без расширения и $ {file ## *.}
, чтобы получить расширение самостоятельно. То есть
file="thisfile.txt"
echo "filename: ${file%.*}"
echo "extension: ${file##*.}"
Выводит:
filename: thisfile
extension: txt