<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Phuong Tran (IT)</title>
    <description>The latest articles on DEV Community by Phuong Tran (IT) (@phuongtran).</description>
    <link>https://dev.to/phuongtran</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3951297%2Fa149694a-ef07-4db1-840e-d8277515aeea.jpg</url>
      <title>DEV Community: Phuong Tran (IT)</title>
      <link>https://dev.to/phuongtran</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/phuongtran"/>
    <language>en</language>
    <item>
      <title>Export all of Andoid apps</title>
      <dc:creator>Phuong Tran (IT)</dc:creator>
      <pubDate>Thu, 28 May 2026 03:37:16 +0000</pubDate>
      <link>https://dev.to/phuongtran/export-all-of-andoid-apps-61d</link>
      <guid>https://dev.to/phuongtran/export-all-of-andoid-apps-61d</guid>
      <description>&lt;p&gt;Download: &lt;a href="https://play.google.com/store/apps/details?id=com.github.keeganwitt.applist" rel="noopener noreferrer"&gt;App List&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sau khi Export một file &lt;em&gt;.html thì bạn mở lên sẽ không thấy app icons đâu. Hãy chạy đoạn script Python dưới đây để có thể **bổ sung app icons vào Android app list&lt;/em&gt;*.&lt;/p&gt;

&lt;p&gt;Để tìm kiếm và bổ sung tự động icon thực tế của ứng dụng (từ Google Play Store hoặc các nguồn khác trên mạng) vào file HTML của bạn, phương pháp tối ưu nhất là sử dụng &lt;strong&gt;Script tự động (Python hoặc NodeJS)&lt;/strong&gt; kết hợp với các công cụ/API cào dữ liệu (Web Scraping).&lt;/p&gt;

&lt;p&gt;Vì trong file HTML của bạn đã có sẵn mã gói ứng dụng (ví dụ: &lt;code&gt;com.alibaba.aliyun&lt;/code&gt;), việc tìm kiếm bằng &lt;code&gt;package-name&lt;/code&gt; sẽ cho kết quả chính xác 100%.&lt;/p&gt;

&lt;p&gt;Dưới đây là các phương pháp phổ biến và dễ thực hiện nhất:&lt;/p&gt;




&lt;h3&gt;
  
  
  Phương pháp 1: Sử dụng thư viện Python &lt;code&gt;google-play-scraper&lt;/code&gt; (Khuyên dùng)
&lt;/h3&gt;

&lt;p&gt;Đây là cách dễ nhất, không cần đăng ký API key và tỷ lệ thành công rất cao. Thư viện này sẽ tự động tìm kiếm trên Google Play Store dựa trên &lt;code&gt;package-name&lt;/code&gt; và trả về link icon (hình ảnh).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cách hoạt động:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Đọc file HTML của bạn để lấy tất cả &lt;code&gt;package-name&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Dùng thư viện quét qua Play Store để lấy URL của icon.&lt;/li&gt;
&lt;li&gt;Chèn thẻ &lt;code&gt;&amp;lt;img src="URL_ICON" /&amp;gt;&lt;/code&gt; vào trước tên ứng dụng trong HTML.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Đoạn code Python mẫu để bạn chạy:&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;(Trước khi chạy, bạn cài thư viện bằng lệnh: &lt;code&gt;pip install google-play-scraper beautifulsoup4&lt;/code&gt;)&lt;/em&gt;&lt;br&gt;
Lưu file với tên tuỳ chọn và chạy trong cmd.exe: &lt;code&gt;py append_applist_icons.py&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;bs4&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BeautifulSoup&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google_play_scraper&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;play_app&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;

&lt;span class="c1"&gt;# 1. Đọc file HTML gốc của bạn (thay tên file tương ứng)
&lt;/span&gt;&lt;span class="n"&gt;input_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apps_20260527232642_1.html&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;output_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apps_with_icons.html&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input_file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;soup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;BeautifulSoup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;html.parser&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Tìm tất cả các khối ứng dụng
&lt;/span&gt;&lt;span class="n"&gt;app_items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;soup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find_all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;div&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;class_&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;app-item&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Đang xử lý &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app_items&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; ứng dụng...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app_items&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;package_div&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;div&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;class_&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;package-name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;package_div&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;package_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;package_div&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="c1"&gt;# 2. Lấy thông tin từ Google Play Store bằng package name
&lt;/span&gt;            &lt;span class="c1"&gt;# Thêm timeout hoặc delay nhỏ để tránh bị Google chặn (Rate limit)
&lt;/span&gt;            &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
            &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;play_app&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;package_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;vi&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;country&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;vn&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;icon_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;icon&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;icon_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="c1"&gt;# 3. Bổ sung thẻ img chứa icon vào trước app-name
&lt;/span&gt;                &lt;span class="n"&gt;name_div&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;div&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;class_&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;app-name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;name_div&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="c1"&gt;# Tạo thẻ img mới
&lt;/span&gt;                    &lt;span class="n"&gt;icon_tag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;soup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new_tag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;img&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;icon_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="n"&gt;icon_tag&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;style&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;width: 48px; height: 48px; display: block; margin: 0 auto 8px auto; border-radius: 10px;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                    &lt;span class="n"&gt;name_div&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insert_before&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;icon_tag&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;] Đã thêm icon cho: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;package_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="c1"&gt;# Nếu ứng dụng không có trên Play Store (app nội địa, app tự phát triển, hoặc bị gỡ)
&lt;/span&gt;            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;] Không tìm thấy trên Play Store: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;package_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="c1"&gt;# Thêm một icon mặc định nếu không tìm thấy
&lt;/span&gt;            &lt;span class="n"&gt;name_div&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;div&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;class_&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;app-name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;name_div&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;icon_tag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;soup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new_tag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;img&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://cdn-icons-png.flaticon.com/512/564/564419.png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="n"&gt;icon_tag&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;style&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;width: 48px; height: 48px; display: block; margin: 0 auto 8px auto; opacity: 0.5;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                &lt;span class="n"&gt;name_div&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insert_before&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;icon_tag&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Sau khi chạy xong, lưu lại thành file mới
&lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;w&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;soup&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hoàn thành! File mới đã được lưu thành:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;output_file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tuỳ vào số lượng app của bạn. Script có thể mất vài phút đến vài chục phút. Trung bình 1-2 giây là sẽ tìm tải và chèn xong một icon vào file html.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh94k1gl95pw0yxdglwgt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh94k1gl95pw0yxdglwgt.png" alt=" " width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Phương pháp 2: Sử dụng các dịch vụ Proxy Icon trực tiếp (Không cần chạy code phức tạp)
&lt;/h3&gt;

&lt;p&gt;Nếu bạn không muốn chạy code Python mà muốn sửa thẳng vào CSS/HTML thông qua một đường dẫn URL động, bạn có thể tận dụng một số dịch vụ bên thứ ba hoặc công cụ hiển thị ảnh theo package name.&lt;/p&gt;

&lt;p&gt;Tuy nhiên, Google Play Store &lt;strong&gt;không&lt;/strong&gt; cung cấp link ảnh cố định dạng &lt;code&gt;play.google.com/icon/com.whatsapp.png&lt;/code&gt;. Do đó, bạn vẫn phải dùng một dịch vụ trung gian (API).&lt;/p&gt;

&lt;p&gt;Ví dụ một số API miễn phí/trả phí từ các bên cung cấp dữ liệu thiết bị di động như &lt;strong&gt;Apkpure&lt;/strong&gt;, &lt;strong&gt;ApkCombo&lt;/strong&gt; hoặc các open-source API trên GitHub:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Thay vì tải ảnh về, bạn có thể gán link ảnh trong HTML dạng: &lt;code&gt;&amp;lt;img src="https://api.example.com/get-icon?package=com.alibaba.aliyun" /&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Nhược điểm:&lt;/em&gt; Các dịch vụ này thường không ổn định lâu dài nếu họ đổi cấu trúc API hoặc chặn request từ trình duyệt.&lt;/p&gt;




&lt;h3&gt;
  
  
  Phương pháp 3: Sử dụng API tìm kiếm hình ảnh của Google/Bing (Dành cho app không có trên Play Store)
&lt;/h3&gt;

&lt;p&gt;Có một số ứng dụng (như game Trung Quốc bản nội địa, ứng dụng rác, ứng dụng hệ thống) sẽ không xuất hiện trên Google Play Store quốc tế.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Giải pháp:&lt;/strong&gt; Bạn có thể dùng &lt;strong&gt;Google Custom Search JSON API&lt;/strong&gt; hoặc &lt;strong&gt;Bing Image Search API&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cách làm:&lt;/strong&gt; Gửi truy vấn tìm kiếm bằng từ khóa &lt;code&gt;"Tên ứng dụng" + "icon png"&lt;/code&gt; hoặc &lt;code&gt;"package-name" + "icon"&lt;/code&gt;. Sau đó lấy URL hình ảnh đầu tiên trả về từ kết quả tìm kiếm để chèn vào HTML.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Lưu ý:&lt;/em&gt; Phương pháp này cần bạn đăng ký API Key (thường miễn phí một lượng giới hạn bài tìm kiếm mỗi ngày).&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Tóm lại, bạn nên làm gì lúc này?
&lt;/h3&gt;

&lt;p&gt;Nếu bạn có một chút kiến thức về máy tính, hãy cài &lt;strong&gt;Python&lt;/strong&gt;, copy đoạn code ở &lt;strong&gt;Phương pháp 1&lt;/strong&gt; và chạy. Nó sẽ tự động đọc file HTML hiện tại của bạn, tự lên mạng tìm đúng logo của Alibaba Cloud (阿里云), Facebook, TikTok,... và chèn thẳng vào file HTML giúp bạn một cách đẹp mắt nhất.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Find Remove duplicated files in Google Drive</title>
      <dc:creator>Phuong Tran (IT)</dc:creator>
      <pubDate>Mon, 25 May 2026 19:31:28 +0000</pubDate>
      <link>https://dev.to/phuongtran/find-remove-duplicated-files-in-google-drive-4kk1</link>
      <guid>https://dev.to/phuongtran/find-remove-duplicated-files-in-google-drive-4kk1</guid>
      <description>&lt;p&gt;Để tìm và xóa các file trùng lặp trong thư mục Google Drive trên máy tính, bạn &lt;strong&gt;không nhất thiết&lt;/strong&gt; phải cài đặt các ứng dụng phần mềm của bên thứ ba vào máy. Thay vào đó, bạn hoàn toàn có thể sử dụng các đoạn script (mã lệnh) chạy trực tiếp trên nền tảng đám mây của Google hoặc sử dụng Command Prompt/Terminal kết hợp với các công cụ mã nguồn mở.&lt;/p&gt;

&lt;p&gt;Dưới đây là 3 cách phổ biến từ việc không cần cài gì cho đến dùng script/command line:&lt;/p&gt;




&lt;h3&gt;
  
  
  Cách 1: Sử dụng Google Apps Script (Không cần cài phần mềm, chạy trực tiếp trên trình duyệt)
&lt;/h3&gt;

&lt;p&gt;Google cung cấp một môi trường lập trình trực tuyến gọi là &lt;strong&gt;Google Apps Script&lt;/strong&gt;. Bạn có thể viết một đoạn mã ngắn để tự động quét toàn bộ Drive của mình, tìm các file trùng tên (hoặc trùng dung lượng) và đưa chúng vào danh sách để xóa hoặc tự động chuyển vào Thùng rác.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cách thực hiện:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Truy cập vào trang &lt;a href="https://script.google.com/" rel="noopener noreferrer"&gt;script.google.com&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Nhấn vào &lt;strong&gt;Dự án mới (New Project)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Xóa hết mã mặc định và dán đoạn mã script (JavaScript) sau vào để tìm các file trùng tên trong một thư mục cụ thể (hoặc toàn bộ Drive):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;cleanAllDuplicates&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Thay 'ID_THU_MUC_CUA_BAN' bằng ID thư mục gốc bạn muốn quét&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;rootFolderId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ID_THU_MUC_CUA_BAN&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;rootFolder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;DriveApp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getFolderById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rootFolderId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;fileMap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;

  &lt;span class="c1"&gt;// Hàm phụ để quét đệ quy qua tất cả thư mục con&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;scanFolder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Đang quét thư mục: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getName&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

    &lt;span class="c1"&gt;// 1. Quét tất cả các file trong thư mục hiện tại&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;files&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getFiles&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hasNext&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getName&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getSize&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="c1"&gt;// Gom nhóm theo Tên + Dung lượng để tránh xóa nhầm các file trùng tên nhưng khác nội dung&lt;/span&gt;
      &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;_&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 

      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fileMap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hasOwnProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;fileMap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;fileMap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// 2. Tìm các thư mục con và tiếp tục quét sâu vào trong&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;subFolders&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getFolders&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;subFolders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hasNext&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;scanFolder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;subFolders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// Bắt đầu kích hoạt quét từ thư mục gốc&lt;/span&gt;
  &lt;span class="nf"&gt;scanFolder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rootFolder&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Tiến hành xử lý và xóa các file trùng lặp sau khi đã gom hết dữ liệu&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;duplicateCount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;fileMap&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fileMap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// Giữ lại file đầu tiên, đưa các file trùng lặp còn lại vào Thùng rác&lt;/span&gt;
      &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;fileMap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;fileToTrash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fileMap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="nx"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;-&amp;gt; Đã chuyển vào Thùng rác: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;fileToTrash&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getName&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
        &lt;span class="nx"&gt;fileToTrash&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setTrashed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
        &lt;span class="nx"&gt;duplicateCount&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nx"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hoàn thành! Tổng số file trùng lặp đã xóa: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;duplicateCount&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9tkw461wfpvcch2t7vuy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9tkw461wfpvcch2t7vuy.png" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Nhấn nút &lt;strong&gt;Lưu (Save)&lt;/strong&gt; (biểu tượng đĩa ảo) và nhấn &lt;strong&gt;Chạy (Run)&lt;/strong&gt;. Hệ thống sẽ yêu cầu bạn cấp quyền truy cập vào Drive của chính bạn để quét file.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Cách 2: Sử dụng Command Prompt / Terminal với công cụ &lt;code&gt;Rclone&lt;/code&gt; (Dành cho người thích dùng dòng lệnh)
&lt;/h3&gt;

&lt;p&gt;Nếu bạn đã cài đặt công cụ &lt;strong&gt;Google Drive cho máy tính (Google Drive for Desktop)&lt;/strong&gt;, các file của bạn sẽ xuất hiện như một ổ đĩa ảo (ví dụ ổ &lt;code&gt;G:\&lt;/code&gt;). Tuy nhiên, việc quét file trùng trực tiếp bằng Command Prompt của Windows rất phức tạp và dễ nhầm lẫn.&lt;/p&gt;

&lt;p&gt;Thay vào đó, dân công nghệ thường sử dụng một công cụ dòng lệnh mã nguồn mở cực mạnh tên là &lt;strong&gt;Rclone&lt;/strong&gt; (không cần cài đặt cài cắm phức tạp, chỉ cần tải file &lt;code&gt;.exe&lt;/code&gt; về chạy). &lt;code&gt;Rclone&lt;/code&gt; có khả năng tương tác trực tiếp với API của Google Drive để tìm file trùng dựa trên &lt;strong&gt;mã băm MD5&lt;/strong&gt; (tức là trùng chính xác 100% nội dung, bất kể tên file có giống nhau hay không).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cách thực hiện bằng Command Line:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tải Rclone về máy tính và cấu hình kết nối tới tài khoản Google Drive của bạn (qua lệnh &lt;code&gt;rclone config&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Mở &lt;strong&gt;Command Prompt (cmd)&lt;/strong&gt; và chạy lệnh sau để tìm các file trùng lặp:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rclone dedupe google_drive:Thư_mục_của_bạn

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Rclone sẽ quét và đưa ra các tùy chọn cho bạn trên Command Prompt:&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;interactive&lt;/code&gt;: Hỏi bạn muốn giữ file nào cho từng trường hợp.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;first&lt;/code&gt;: Tự động giữ lại file đầu tiên tìm thấy và xóa các file sau.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;newest&lt;/code&gt;: Giữ lại file có thời gian chỉnh sửa mới nhất.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;oldest&lt;/code&gt;: Giữ lại file cũ nhất.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Cách 3: Sử dụng các Add-on/Ứng dụng chính thức trên Google Workspace Marketplace
&lt;/h3&gt;

&lt;p&gt;Nếu việc chạy code hay gõ dòng lệnh quá phức tạp, bạn có thể sử dụng các tiện ích mở rộng được Google kiểm duyệt tích hợp thẳng vào tài khoản của bạn (không cần tải phần mềm về máy tính Windows/Mac).&lt;/p&gt;

&lt;p&gt;Một trong những công cụ phổ biến và an toàn nhất là &lt;strong&gt;Filerev&lt;/strong&gt; hoặc &lt;strong&gt;Organizer &amp;amp; Duplicate Remover for Google Drive™&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bạn chỉ cần vào &lt;strong&gt;Google Workspace Marketplace&lt;/strong&gt;, tìm tên các công cụ này rồi chọn cài đặt.&lt;/li&gt;
&lt;li&gt;Các công cụ này chạy trực tiếp trên đám mây, tự động quét và phân loại các file trùng lặp chính xác 100% dựa trên byte dữ liệu, sau đó hiển thị danh sách cho bạn tick chọn xóa hàng loạt rất trực quan.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tóm lại:&lt;/strong&gt; Bạn &lt;strong&gt;không cần tải phần mềm bên thứ ba cài vào máy tính&lt;/strong&gt;. Nếu bạn biết một chút về code, hãy dùng &lt;strong&gt;Cách 1 (Google Apps Script)&lt;/strong&gt; để xử lý nhanh và hoàn toàn miễn phí; nếu muốn quét chuẩn xác bằng dòng lệnh theo nội dung file, hãy dùng &lt;strong&gt;Cách 2 (Rclone)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Để hiểu chi tiết hơn về cách thức hoạt động của các công cụ quét dọn tài khoản Drive tự động trên đám mây mà không cần cài phần mềm máy tính, bạn có thể tham khảo video hướng dẫn này.&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=T1BojtZBYzA" rel="noopener noreferrer"&gt;Hướng dẫn tìm và xóa file trùng lặp trên Google Drive&lt;/a&gt;&lt;br&gt;
Video này sẽ chỉ cho bạn từng bước cách sử dụng các công cụ dọn dẹp an toàn kết nối trực tiếp qua API của Google để quét và lọc bỏ các file trùng tên hoặc trùng nội dung một cách nhanh chóng.&lt;/p&gt;

</description>
      <category>drive</category>
      <category>script</category>
      <category>dubplicated</category>
      <category>remove</category>
    </item>
  </channel>
</rss>
