本文目录导读:

我来介绍几种记忆位置的脚本方案,从简单到复杂:
🎯 命令行历史搜索
最简单的方式,记录经常使用的命令:
# 在 ~/.bashrc 或 ~/.zshrc 中添加
# 搜索历史命令
function find_cmd() {
history | grep -i "$1" | tail -20
}
# 记住当前位置
function remember() {
echo "$PWD" >> ~/.locations
echo "📍 已记住: $PWD"
}
# 跳转到记住的位置
function goto() {
if [ -z "$1" ]; then
# 显示所有位置
cat -n ~/.locations
else
cd "$(sed -n "${1}p" ~/.locations)"
fi
}
⚡ 快速书签工具
# ~/.bashrc 或 ~/.zshrc 中添加
BOOKMARKS_FILE="$HOME/.bookmarks"
# 添加书签
bookmark() {
local name="$1"
local dir="$PWD"
if [ -z "$name" ]; then
echo "用法: bookmark 名称"
return 1
fi
echo "$name=$dir" >> "$BOOKMARKS_FILE"
echo "✅ 已添加书签: $name -> $dir"
}
# 跳转到书签
bm() {
if [ -z "$1" ]; then
# 显示所有书签
while IFS='=' read -r name dir; do
echo "📌 $name -> $dir"
done < "$BOOKMARKS_FILE"
return 0
fi
local dir=$(grep "^$1=" "$BOOKMARKS_FILE" | cut -d'=' -f2)
if [ -n "$dir" ]; then
cd "$dir"
echo "🚀 已跳转到: $dir"
else
echo "❌ 未找到书签: $1"
fi
}
# 删除书签
bm_del() {
sed -i "/^$1=/d" "$BOOKMARKS_FILE"
echo "🗑️ 已删除书签: $1"
}
📁 Python 脚本(跨平台)
#!/usr/bin/env python3
# location_manager.py
import json
import os
import sys
from pathlib import Path
import subprocess
class LocationManager:
def __init__(self):
self.config_file = Path.home() / ".location_manager.json"
self.locations = self.load()
def load(self):
if self.config_file.exists():
with open(self.config_file, 'r') as f:
return json.load(f)
return {}
def save(self):
with open(self.config_file, 'w') as f:
json.dump(self.locations, f, indent=2, ensure_ascii=False)
def add(self, name, path=None):
if path is None:
path = os.getcwd()
path = os.path.abspath(path)
self.locations[name] = path
self.save()
print(f"✅ 已添加: {name} -> {path}")
def list_all(self):
print("📁 记忆的位置:")
for i, (name, path) in enumerate(self.locations.items(), 1):
is_dir = os.path.isdir(path)
is_file = os.path.isfile(path)
type_icon = "📂" if is_dir else "📄" if is_file else "❓"
print(f" {i}. {type_icon} {name} -> {path}")
def goto(self, name):
if name in self.locations:
path = self.locations[name]
if os.path.exists(path):
os.system(f'cd "{path}" && exec $SHELL')
else:
print(f"⚠️ 路径不存在: {path}")
if input("是否删除该记录?(y/n): ").lower() == 'y':
del self.locations[name]
self.save()
else:
print(f"❌ 未找到: {name}")
def search(self, keyword):
print(f"🔍 搜索 [{keyword}] 的结果:")
for name, path in self.locations.items():
if keyword.lower() in name.lower() or keyword.lower() in path.lower():
type_icon = "📂" if os.path.isdir(path) else "📄"
print(f" {type_icon} {name} -> {path}")
def remove(self, name):
if name in self.locations:
del self.locations[name]
self.save()
print(f"🗑️ 已删除: {name}")
else:
print(f"❌ 未找到: {name}")
def backup(self, backup_file):
with open(backup_file, 'w') as f:
json.dump(self.locations, f, indent=2)
print(f"💾 已备份到: {backup_file}")
def restore(self, backup_file):
if Path(backup_file).exists():
with open(backup_file, 'r') as f:
self.locations = json.load(f)
self.save()
print(f"♻️ 已恢复数据")
else:
print(f"❌ 备份文件不存在: {backup_file}")
def main():
lm = LocationManager()
if len(sys.argv) < 2:
lm.list_all()
return
cmd = sys.argv[1]
if cmd == "add":
name = sys.argv[2]
path = sys.argv[3] if len(sys.argv) > 3 else None
lm.add(name, path)
elif cmd == "list":
lm.list_all()
elif cmd == "go":
if len(sys.argv) < 3:
print("用法: loc.py go <名称>")
else:
lm.goto(sys.argv[2])
elif cmd == "search":
keyword = sys.argv[2]
lm.search(keyword)
elif cmd == "remove":
name = sys.argv[2]
lm.remove(name)
elif cmd == "backup":
backup_file = sys.argv[2] if len(sys.argv) > 2 else "locations_backup.json"
lm.backup(backup_file)
elif cmd == "restore":
if len(sys.argv) > 2:
lm.restore(sys.argv[2])
elif cmd == "help":
print("""用法: python loc.py [命令] [参数]
可用命令:
add <名称> [路径] - 添加位置
list - 列出所有位置
go <名称> - 跳转到位置
search <关键词> - 搜索位置
remove <名称> - 删除位置
backup [文件] - 备份数据
restore <文件> - 恢复数据
help - 显示帮助
""")
if __name__ == "__main__":
main()
🚀 智能位置记忆(高级)
#!/usr/bin/env python3
# smart_locations.py
import json
import os
import time
from pathlib import Path
from collections import defaultdict
class SmartLocationManager:
def __init__(self):
self.data_file = Path.home() / ".smart_locations.json"
self.data = self.load()
def load(self):
if self.data_file.exists():
with open(self.data_file, 'r') as f:
return json.load(f)
return {"locations": {}, "history": {}}
def save(self):
with open(self.data_file, 'w') as f:
json.dump(self.data, f, indent=2)
def add(self, name, path, tags=None, priority=1):
"""添加位置,支持标签和优先级"""
path = os.path.abspath(path)
self.data["locations"][name] = {
"path": path,
"tags": tags or [],
"priority": priority,
"created": time.time(),
"last_used": time.time(),
"count": 0
}
self.save()
print(f"✅ 已添加: {name}")
def goto(self, name):
"""跳转并记录使用频率"""
if name in self.data["locations"]:
loc = self.data["locations"][name]
loc["last_used"] = time.time()
loc["count"] += 1
self.save()
path = loc["path"]
print(f"🚀 跳转到: {path}")
# 尝试 cd,如果在 Unix 系统
if os.name == 'posix':
os.system(f'cd "{path}" && exec $SHELL')
def suggest(self, limit=5):
"""根据使用频率和最近使用时间推荐位置"""
locations = list(self.data["locations"].items())
# 排序:使用次数多、最近使用过的优先
locations.sort(key=lambda x: (
x[1]["count"] > 0,
x[1]["last_used"],
x[1]["priority"]
), reverse=True)
print("💡 推荐位置:")
for name, info in locations[:limit]:
print(f" {name} -> {info['path']} (使用{info['count']}次)")
def search_by_tags(self, *tags):
"""按标签搜索"""
results = []
for name, info in self.data["locations"].items():
if all(tag in info["tags"] for tag in tags):
results.append((name, info["path"]))
if results:
print(f"🏷️ 找到 {len(results)} 个匹配的位置:")
for name, path in results:
print(f" {name} -> {path}")
else:
print("❌ 未找到匹配的位置")
def cleanup_invalid(self):
"""清理不存在的路径"""
invalid = []
for name, info in self.data["locations"].items():
if not os.path.exists(info["path"]):
invalid.append(name)
for name in invalid:
print(f"⚠️ 删除失效位置: {name}")
del self.data["locations"][name]
if invalid:
self.save()
else:
print("✨ 所有位置都是有效的")
def group_by_tag(self):
"""按标签分组显示"""
groups = defaultdict(list)
for name, info in self.data["locations"].items():
for tag in info["tags"]:
groups[tag].append((name, info["path"]))
for tag, locations in groups.items():
print(f"📦 [{tag}]")
for name, path in locations:
print(f" {name} -> {path}")
# 交互式 shell
def interactive_shell():
sm = SmartLocationManager()
while True:
try:
cmd = input("\n📁 位置管理器> ").strip().split()
if not cmd:
continue
if cmd[0] == "exit" or cmd[0] == "quit":
break
elif cmd[0] == "add":
if len(cmd) >= 2:
name = cmd[1]
path = cmd[2] if len(cmd) > 2 else os.getcwd()
tags = cmd[3:] if len(cmd) > 3 else []
sm.add(name, path, tags)
elif cmd[0] == "list":
sm.suggest(100) # 显示所有
elif cmd[0] == "go":
if len(cmd) > 1:
sm.goto(cmd[1])
elif cmd[0] == "suggest":
sm.suggest(5)
elif cmd[0] == "tags":
if len(cmd) > 1:
sm.search_by_tags(*cmd[1:])
else:
sm.group_by_tag()
elif cmd[0] == "cleanup":
sm.cleanup_invalid()
elif cmd[0] == "help":
print("""可用命令:
add <名称> [路径] [标签...] - 添加位置
list - 列出所有位置
go <名称> - 跳转到位置
suggest - 推荐位置
tags <标签...> - 按标签搜索
cleanup - 清理失效位置
exit/quit - 退出
""")
else:
print("未知命令,输入 help 查看帮助")
except KeyboardInterrupt:
break
except Exception as e:
print(f"❌ 错误: {e}")
if __name__ == "__main__":
interactive_shell()
🔧 使用方法
安装和配置:
# 1. 保存脚本 chmod +x location_manager.py smart_locations.py cp location_manager.py /usr/local/bin/loc cp smart_locations.py /usr/local/bin/smart-loc # 2. 添加到 shell 配置文件 (~/.bashrc 或 ~/.zshrc) alias loc="python3 /usr/local/bin/loc" alias slog="python3 /usr/local/bin/smart-loc"
示例使用:
# 添加位置 loc add project ~/Projects/myapp smart-loc > add home ~ tags:personal important # 查看所有位置 loc list # 跳转 loc go project # 搜索 loc search project
功能特性:
- 基础版:命令行历史 + 书签
- 标准版:Python 管理,支持标签
- 智能版:使用频率统计、智能推荐、自动清理
选择哪种取决于你的需求:
- 简单使用:选择命令行版本
- 跨平台:选 Python 基础版
- 进阶管理:选智能版
需要我解释具体某个功能或帮你定制吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播