Split files into filenames and paths
This commit is contained in:
parent
f02133d6ab
commit
41362eccf1
|
@ -6,7 +6,8 @@ CREATE TABLE IF NOT EXISTS "tags" (
|
||||||
);
|
);
|
||||||
CREATE TABLE IF NOT EXISTS "files" (
|
CREATE TABLE IF NOT EXISTS "files" (
|
||||||
"id" INTEGER,
|
"id" INTEGER,
|
||||||
"filename" TEXT,
|
"filename" TEXT NOT NULL,
|
||||||
|
"path" TEXT,
|
||||||
PRIMARY KEY("id" AUTOINCREMENT)
|
PRIMARY KEY("id" AUTOINCREMENT)
|
||||||
);
|
);
|
||||||
CREATE TABLE IF NOT EXISTS "tags_ties" (
|
CREATE TABLE IF NOT EXISTS "tags_ties" (
|
||||||
|
|
37
tag.sh
37
tag.sh
|
@ -57,7 +57,7 @@ listtags() {
|
||||||
FILENAME="$1"
|
FILENAME="$1"
|
||||||
shift
|
shift
|
||||||
|
|
||||||
! file_exists_in_db "$FILENAME" && fail "File '$FILENAME' does not exist in database."
|
# ! file_exists_in_db "$FILENAME" && fail "File '$FILENAME' does not exist in database."
|
||||||
|
|
||||||
LIMIT="${1:-0}"
|
LIMIT="${1:-0}"
|
||||||
ADDITIONAL_QUERY=""
|
ADDITIONAL_QUERY=""
|
||||||
|
@ -67,7 +67,7 @@ listtags() {
|
||||||
"SELECT filename, label from files \
|
"SELECT filename, label from files \
|
||||||
INNER JOIN tags_ties ON tags_ties.fid = files.id \
|
INNER JOIN tags_ties ON tags_ties.fid = files.id \
|
||||||
INNER JOIN tags ON tags.id = tags_ties.tid \
|
INNER JOIN tags ON tags.id = tags_ties.tid \
|
||||||
WHERE filename = \"$FILENAME\"\
|
WHERE filename LIKE \"%$FILENAME%\"\
|
||||||
$ADDITIONAL_QUERY"
|
$ADDITIONAL_QUERY"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,6 +82,7 @@ add() {
|
||||||
|
|
||||||
sqlite_query() {
|
sqlite_query() {
|
||||||
# $QUERY
|
# $QUERY
|
||||||
|
dbfile_exists || fail "Database file '$DB_FILE' does not exist. Use '$SCRIPT_NAME init' to create default one, or specify filename with '--db'."
|
||||||
sqlite3 "$DB_FILE" "$1"
|
sqlite3 "$DB_FILE" "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,8 +124,8 @@ sqlite_insert_multi() {
|
||||||
VALUES="($1,$2)"
|
VALUES="($1,$2)"
|
||||||
if [[ ! -z "${3:-}" && ! -z "${4:-}" ]]; then
|
if [[ ! -z "${3:-}" && ! -z "${4:-}" ]]; then
|
||||||
while true; do
|
while true; do
|
||||||
shift
|
shift 2
|
||||||
[ -z "${1:-}" && -z "${2:-}" ] && break
|
[[ -z "${1:-}" && -z "${2:-}" ]] && break
|
||||||
VALUES+=",($1,$2)"
|
VALUES+=",($1,$2)"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
@ -143,11 +144,16 @@ add_tag() {
|
||||||
add_path() {
|
add_path() {
|
||||||
# $PATH1..$PATHN
|
# $PATH1..$PATHN
|
||||||
TABLE="files"
|
TABLE="files"
|
||||||
COLUMN="filename"
|
COLUMN="filename,path"
|
||||||
|
FILES=()
|
||||||
for FILE in "$@"; do
|
for FILE in "$@"; do
|
||||||
file_exists_in_db "$FILE" && fail "File '$FILENAME' already exists in database."
|
FILENAME=$(basename "$FILE")
|
||||||
|
FILEPATH=$(dirname "$FILE")
|
||||||
|
file_exists_in_db "$FILE" && fail "File '$FILE' already exists in database."
|
||||||
|
FILES+=("'$FILENAME'")
|
||||||
|
FILES+=("'$FILEPATH'")
|
||||||
done
|
done
|
||||||
sqlite_insert_single "$TABLE" "$COLUMN" "$@"
|
sqlite_insert_multi "$TABLE" "$COLUMN" "${FILES[@]}"
|
||||||
}
|
}
|
||||||
|
|
||||||
add_hash() {
|
add_hash() {
|
||||||
|
@ -178,8 +184,9 @@ tag_exists_in_db() {
|
||||||
|
|
||||||
file_exists_in_db() {
|
file_exists_in_db() {
|
||||||
# $FILENAME
|
# $FILENAME
|
||||||
FILENAME=${1:-}
|
FILENAME=$(basename "${1:-}")
|
||||||
RESULT=$(sqlite_query "SELECT id FROM files WHERE filename = '$FILENAME'")
|
FILEPATH=$(dirname "${1:-}")
|
||||||
|
RESULT=$(sqlite_query "SELECT id FROM files WHERE filename = '$FILENAME' AND path = '$FILEPATH'")
|
||||||
if [[ -z "$RESULT" ]]; then
|
if [[ -z "$RESULT" ]]; then
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
|
@ -187,6 +194,14 @@ file_exists_in_db() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dbfile_exists() {
|
||||||
|
if [[ ! -f "$DB_FILE" ]]; then
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
|
|
||||||
[ -z "${1:-}" ] && fail "Usage: tag init/add/import/autoimport/list/listtags"
|
[ -z "${1:-}" ] && fail "Usage: tag init/add/import/autoimport/list/listtags"
|
||||||
|
@ -218,14 +233,14 @@ main() {
|
||||||
if [[ "$1" = "list" ]]; then
|
if [[ "$1" = "list" ]]; then
|
||||||
[ -z "$2" ] && fail "No table supplied."
|
[ -z "$2" ] && fail "No table supplied."
|
||||||
TABLE_NAME="$2"
|
TABLE_NAME="$2"
|
||||||
sqlite3 -table "$DB_FILE" "SELECT * FROM \"${TABLE_NAME}\""
|
sqlite_query "SELECT * FROM \"${TABLE_NAME}\""
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$1" = "bytag" ]]; then
|
if [[ "$1" = "bytag" ]]; then
|
||||||
[ -z "$2" ] && fail "No tag supplied."
|
[ -z "$2" ] && fail "No tag supplied."
|
||||||
TAG_NAME="$2"
|
TAG_NAME="$2"
|
||||||
sqlite3 -table "$DB_FILE" "SELECT filename FROM files WHERE id = (SELECT id FROM tags_ties WHERE id = (SELECT id FROM tags WHERE label = \"${TAG_NAME}\"))"
|
sqlite_query "SELECT filename FROM files WHERE id = (SELECT id FROM tags_ties WHERE id = (SELECT id FROM tags WHERE label = \"${TAG_NAME}\"))"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue