<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Cmdl Tool on Tech Notes by ClaudeXu</title>
        <link>https://blog.cxu.my.id/tags/cmdl-tool/</link>
        <description>Recent content in Cmdl Tool on Tech Notes by ClaudeXu</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <lastBuildDate>Fri, 14 Aug 2026 15:35:08 +0800</lastBuildDate><atom:link href="https://blog.cxu.my.id/tags/cmdl-tool/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>fd, The Cmdl Version of Everything</title>
        <link>https://blog.cxu.my.id/post/tools/fd/</link>
        <pubDate>Fri, 14 Aug 2026 15:35:08 +0800</pubDate>
        
        <guid>https://blog.cxu.my.id/post/tools/fd/</guid>
        <description>&lt;h2 id=&#34;intro&#34;&gt;Intro
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;fd&lt;/code&gt; searches files according to name, size, type, etc. Don&amp;rsquo;t get confused with &lt;code&gt;grep&lt;/code&gt; which searches the contents of the file.&lt;/p&gt;
&lt;h2 id=&#34;alias&#34;&gt;Alias
&lt;/h2&gt;&lt;p&gt;The executable is named &lt;code&gt;fdfind&lt;/code&gt; in some old versions, and it&amp;rsquo;s recommended to set &lt;code&gt;fd&lt;/code&gt; as an alias.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias fd&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;fdfind&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;usage&#34;&gt;Usage
&lt;/h2&gt;&lt;p&gt;Regex is used by default&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chsu@claudehsu:~/Sandbox$ fd &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;.*\.rs$&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RustLab/RustHello/hello.rs
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RustLab/rust_hi/src/main.rs
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Notice&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-i&lt;/code&gt; option can be used for case insensitive search.&lt;/li&gt;
&lt;li&gt;Files in &lt;code&gt;.gitignore&lt;/code&gt; are by default ignored, meaning &lt;code&gt;fd&lt;/code&gt; respects &lt;code&gt;.gitignore&lt;/code&gt;. Use &lt;code&gt;-I&lt;/code&gt; to include those ignored files.&lt;/li&gt;
&lt;li&gt;Hidden files are ignored. Use &lt;code&gt;-H&lt;/code&gt; to include those hidden files.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;search-by-file-full-path&#34;&gt;Search by File Full Path
&lt;/h3&gt;&lt;p&gt;With &lt;code&gt;-p&lt;/code&gt; option, the regex matches against the file full path, instead of the file name.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chsu@claudehsu:~/Sandbox$ fd -p -i &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;.*pythonlab.*\.py$&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PythonLab/Scripts/lab.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;search-by-file-size&#34;&gt;Search by File Size
&lt;/h3&gt;&lt;p&gt;Search by file size using:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;+&amp;lt;size&amp;gt;&lt;/code&gt;: greater than &lt;code&gt;&amp;lt;size&amp;gt;&lt;/code&gt;, such as &lt;code&gt;+1m&lt;/code&gt; means greater than 1 MB&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-&amp;lt;size&amp;gt;&lt;/code&gt;: smaller than &lt;code&gt;&amp;lt;size&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The command below searches &lt;code&gt;.py&lt;/code&gt; files whose size is greater than 800KB.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chsu@claudehsu:~/Sandbox$ fd -l -S +800k &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;.*\.py$&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-rw-rw-r-- &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; chsu chsu 841K Nov  &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;2025&lt;/span&gt; ./AILab/Env/lib/python3.14/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema.py
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-rw-rw-r-- &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; chsu chsu 841K Jul  &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; 00:15 ./DuckDBLab/env/lib/python3.14/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;search-by-file-type&#34;&gt;Search by File Type
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;-t&lt;/code&gt; option can be used to specify the file type&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-t, --type &amp;lt;filetype&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Filter the search by type:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;f&amp;#39;&lt;/span&gt; or &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;file&amp;#39;&lt;/span&gt;:         regular files
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;d&amp;#39;&lt;/span&gt; or &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;dir&amp;#39;&lt;/span&gt; or &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;directory&amp;#39;&lt;/span&gt;:    directories
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;l&amp;#39;&lt;/span&gt; or &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;symlink&amp;#39;&lt;/span&gt;:      symbolic links
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s&amp;#39;&lt;/span&gt; or &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;socket&amp;#39;&lt;/span&gt;:       socket
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;p&amp;#39;&lt;/span&gt; or &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;pipe&amp;#39;&lt;/span&gt;:         named pipe &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;FIFO&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt; or &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;block-device&amp;#39;&lt;/span&gt;: block device
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;c&amp;#39;&lt;/span&gt; or &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;char-device&amp;#39;&lt;/span&gt;:  character device
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;x&amp;#39;&lt;/span&gt; or &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;executable&amp;#39;&lt;/span&gt;:   executables
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;e&amp;#39;&lt;/span&gt; or &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;empty&amp;#39;&lt;/span&gt;:        empty files or directories
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The command below searches the current directory to find all directories containing the letter &amp;rsquo;t&#39;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chsu@claudehsu:~/Sandbox$ fd -d &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; -t d &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;.*t.*&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DataLab
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PythonLab
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RustLab
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Explanation&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-d&lt;/code&gt; specifies the max depth, so &lt;code&gt;-d 1&lt;/code&gt; means to search the current directory only.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-t d&lt;/code&gt; specifies to only search for directory entries.&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>My Cmdl Cheatsheet</title>
        <link>https://blog.cxu.my.id/post/tools/cmdl-cheatsheet/</link>
        <pubDate>Fri, 14 Aug 2026 14:35:08 +0800</pubDate>
        
        <guid>https://blog.cxu.my.id/post/tools/cmdl-cheatsheet/</guid>
        <description>&lt;h2 id=&#34;fd&#34;&gt;fd
&lt;/h2&gt;&lt;p&gt;Search the current directory for all directories whose names contain the letter &amp;rsquo;t&#39;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ fd -d &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; -t d &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;.*t.*&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DataLab
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PythonLab
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RustLab
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-d 1&lt;/code&gt; means the max depth is 1, which is equivalent to the current directory.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-t d&lt;/code&gt; means to only include entries of directory type.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Search against file full path&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ fd -p -i &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;.*pythonlab.*\.py$&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PythonLab/Scripts/lab.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Search by file size&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ fd -l -S +800K &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;.*\.py$&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-rw-rw-r-- &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; chsu chsu 841K Nov  &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;2025&lt;/span&gt; ./AILab/Env/lib/python3.14/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema.py
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-rw-rw-r-- &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; chsu chsu 841K Jul  &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; 00:15 ./DuckDBLab/env/lib/python3.14/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-S +/-&amp;lt;size&amp;gt;&lt;/code&gt; can specify a file size greater or smaller than &lt;code&gt;&amp;lt;size&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-l&lt;/code&gt; shows detailed information about the matching files.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;jupyter-lab&#34;&gt;Jupyter Lab
&lt;/h2&gt;&lt;p&gt;Start Jupyter Lab, listening on port 9523 and allowing traffic from all networks.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;jupyter lab --ip&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;0.0.0.0 --port&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;9523&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;vifm&#34;&gt;Vifm
&lt;/h2&gt;&lt;p&gt;Basic file operations&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cw&lt;/code&gt; to rename (change word) the file&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cW&lt;/code&gt; to rename the base name of the file&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dd&lt;/code&gt; to delete/cut the file&lt;/li&gt;
&lt;li&gt;&lt;code&gt;t&lt;/code&gt; to toggle selection of the file&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:filter &amp;lt;regex&amp;gt;&lt;/code&gt; to filter out/hide files from the file list
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;:filter! &amp;lt;regex&amp;gt;&lt;/code&gt; to keep the files according to the regex&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hide/show hidden files&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;za&lt;/code&gt; to toggle hiding/showing hidden files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Preview files&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;w&lt;/code&gt; to toggle preview of the current file&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Use marks as follows&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;m&lt;/code&gt; to mark/label the position&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&#39;&lt;/code&gt; to go to the marked position&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Split/hide windows as follows&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;:only&lt;/code&gt; to only show the active window pane&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vs&lt;/code&gt; to vertically split the window&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sp&lt;/code&gt; to horizontally split the window&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
