路徑太長,想要縮短到 80 個字元以內,又要可以辨識,唯一找到的工具是 https://github.com/chrissound/SodiumSierraStrawberry
但這工具執行起來有問題,想要重新編譯,對 haskell 又不熟,只好放棄。
好在找到這篇:Path shortener for GUI application ,裏面提到可以用 Python3 的 pathlib 來做,於是就順手改了一下,做出自己要的工具
#!/usr/bin/env python3
import argparse
import sys
import pathlib
def cut_path(path, limit):
if len(path)>limit:
parts = list(pathlib.PurePath(path).parts)
# print(parts)
#if len(parts) >= 4:
# parts [2:-1] = ['...']
new_parts = []
for part in parts[:-1]:
if len(part)>4:
new_parts.append(part[:4] + "..")
else:
new_parts.append(part)
new_parts.append(parts[-1])
#print(new_parts)
new_path = str(pathlib.PurePath(*new_parts))
#print(len(new_path))
if len(new_path) > limit:
parts[2:-1] = ['...']
return pathlib.PurePath(*parts)
return new_path
else:
return path
def main():
parser = argparse.ArgumentParser(
prog=sys.argv[0],
)
parser.add_argument('-l', '--limit', type=int, default=76)
parser.add_argument('filename')
args = parser.parse_args()
print(cut_path(args.filename, args.limit))
if __name__ == "__main__":
main()
基本運作是這樣
- 超過指定字元數目就做縮減,沒超過就直接回傳。
- 縮減的作法:使用 Pathlib 的 PurePath.parts() 把路徑拆成一段一段的,然後用名稱去做判斷,超過 4 個字元就把後面的改為 “…” ,然後產出新的字串。
- 若 2 的字串還是超過指定字元數目,就直接把其中一部份都刪除掉,改為 “…”
結果大約會是這樣
/home/user1/aaa.txt
coll../ansi../gov/twgc../role../veri../task../main.yml
collection/ansible_collections/.../main.yml
能夠這樣用 Python3 快速的弄出個小工具,真的是蠻開心的,Python3 真的自帶很多好東西可用。
沒有留言:
張貼留言