#!/home/node/.openclaw/mcp-venv/bin/python3 import sys, os, mimetypes, filetype def get_file_info(filepath, mime_only=False): if not os.path.exists(filepath): return "cannot open (No such file or directory)", "cannot open (No such file or directory)" if os.path.isdir(filepath): return "directory", "inode/directory" kind = filetype.guess(filepath) if kind is not None: return f"{kind.extension.upper()} image/media data ({kind.mime})", kind.mime guessed_mime, _ = mimetypes.guess_type(filepath) try: with open(filepath, "rb") as f: sample = f.read(4096) if len(sample) == 0: return "empty", "application/x-empty" try: sample.decode("utf-8") if guessed_mime: return f"{guessed_mime} text", guessed_mime return "ASCII text", "text/plain" except UnicodeDecodeError: return "data", "application/octet-stream" except Exception as e: return f"cannot read ({e})", "application/octet-stream" def main(): args = sys.argv[1:] brief, mime_only, files = False, False, [] for arg in args: if arg in ("-b", "--brief"): brief = True elif arg in ("-i", "--mime", "--mime-type"): mime_only = True elif arg.startswith("-") and len(arg) > 1 and not arg.startswith("--"): if "b" in arg: brief = True if "i" in arg: mime_only = True else: files.append(arg) if not files: sys.stderr.write("Usage: file [-b] [-i|--mime-type] ...\n") sys.exit(1) for f in files: desc, mime = get_file_info(f, mime_only) res = mime if mime_only else desc print(res if brief else f"{f}: {res}") if __name__ == "__main__": main()