整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          如何在 Linux 上重命名一組文件

          用單個命令重命名一組文件,請使用 rename 命令。它需要使用正則表達式,并且可以在開始前告訴你會有什么更改。

          -- Sandra Henry-stocker(作者)

          幾十年來,Linux 用戶一直使用 mv 命令重命名文件。它很簡單,并且能做到你要做的。但有時你需要重命名一大組文件。在這種情況下,rename 命令可以使這個任務更容易。它只需要一些正則表達式的技巧。

          與 mv 命令不同,rename 不允許你簡單地指定舊名稱和新名稱。相反,它使用類似于 Perl 中的正則表達式。在下面的例子中,s 指定我們將第一個字符串替換為第二個字符串(舊的),從而將 this.new 變為 this.old。

          $ rename 's/new/old/' this.new
          $ ls this*
          this.old
          

          使用 mv this.new this.old 可以更容易地進行更改一個,但是將字符串 this 變成通配符 *,你可以用一條命令將所有的 *.new 文件重命名為 *.old:

          $ ls *.new
          report.new schedule.new stats.new this.new
          $ rename 's/new/old/' *.new
          $ ls *.old
          report.old schedule.old stats.old this.old
          

          正如你所料,rename 命令不限于更改文件擴展名。如果你需要將名為 report.* 的文件更改為 review.*,那么可以使用以下命令做到:

          $ rename 's/report/review/' *
          

          正則表達式中的字符串可以更改文件名的任何部分,無論是文件名還是擴展名。

          $ rename 's/123/124/' *
          $ ls *124*
          status.124 report124.txt
          

          如果你在 rename 命令中添加 -v 選項,那么該命令將提供一些反饋,以便你可以看到所做的更改,或許會包含你沒注意的。這讓你注意到并按需還原更改。

          $ rename -v 's/123/124/' *
          status.123 renamed as status.124
          report123.txt renamed as report124.txt
          

          另一方面,使用 -n(或 --nono)選項會使 rename 命令告訴你將要做的但不會實際做的更改。這可以讓你免于執行不不想要的操作,然后再還原更改。

          $ rename -n 's/old/save/' *
          rename(logger.man-old, logger.man-save)
          rename(lyrics.txt-old, lyrics.txt-save)
          rename(olderfile-, saveerfile-)
          rename(oldfile, savefile)
          rename(review.old, review.save)
          rename(schedule.old, schedule.save)
          rename(stats.old, stats.save)
          rename(this.old, this.save)
          

          如果你對這些更改滿意,那么就可以運行不帶 -n 選項的命令來更改文件名。

          但請注意,正則表達式中的 . 不會被視為句點,而是作為匹配任何字符的通配符。上面和下面的示例中的一些更改可能不是輸入命令的人希望的。

          $ rename -n 's/.old/.save/' *
          rename(logger.man-old, logger.man.save)
          rename(lyrics.txt-old, lyrics.txt.save)
          rename(review.old, review.save)
          rename(schedule.old, schedule.save)
          rename(stats.old, stats.save)
          rename(this.old, this.save)
          

          為確保句點按照字面意思執行,請在它的前面加一個反斜杠。這將使其不被解釋為通配符并匹配任何字符。請注意,進行此更改時,僅選擇了 .old 文件。

          $ rename -n 's/\.old/.save/' *
          rename(review.old, review.save)
          rename(schedule.old, schedule.save)
          rename(stats.old, stats.save)
          rename(this.old, this.save)
          

          下面的命令會將文件名中的所有大寫字母更改為小寫,除了使用 -n 選項來確保我們在命令執行之前檢查將做的修改。注意在正則表達式中使用了 y,這是改變大小寫所必需的。

          $ rename -n 'y/A-Z/a-z/' W*
          rename(WARNING_SIGN.pdf, warning_sign.pdf)
          rename(Will_Gardner_buttons.pdf, will_gardner_buttons.pdf)
          rename(Wingding_Invites.pdf, wingding_invites.pdf)
          rename(WOW-buttons.pdf, wow-buttons.pdf)
          

          在上面的例子中,我們將所有大寫字母更改為了小寫,但這僅對以大寫字母 W 開頭的文件名。

          總結

          當你需要重命名大量文件時,rename 命令非常有用。請注意不要做比預期更多的更改。請記住,-n(或者 --nono)選項可以幫助你避免耗時的錯誤。


          via: https://www.networkworld.com/article/3433865/how-to-rename-a-group-of-files-on-linux.html

          作者: Sandra Henry-Stocker 選題: lujun9972 譯者: geekpi 校對: wxy

          本文由 LCTT 原創編譯, Linux中國 榮譽推出

          點擊“了解更多”可訪問文內鏈接

          譯自: https://fedoramagazine.org/design-faster-web-pages-part-3-font-css-tweaks/

          作者: Sirko Kemter

          譯者: David Dai

          歡迎回到我們為了構建更快網頁所寫的系列文章。本系列的 第一部分 和 第二部分 講述了如何通過優化和替換圖片來減少瀏覽器脂肪。本部分會著眼于在 CSS( 層疊式樣式表 )和字體中減掉更多的脂肪。

          調整 CSS

          首先,我們先來看看問題的源頭。CSS 的出現曾是技術的一大進步。你可以用一個集中式的樣式表來裝飾多個網頁。如今很多 Web 開發者都會使用 Bootstrap 這樣的框架。

          這些框架當然方便,可是很多人都會將整個框架直接復制粘貼走。Bootstrap 非常大:目前 Bootstrap 4.0 的“最小”版本也有 144.9 KB. 在這個以 TB 來計數據的時代,它可能不算多。但就像所說的那樣,一頭小牛也能搞出大麻煩。

          我們回頭來看 getfedora.org 的例子。我們在 第一部分 中提過,第一個分析結果顯示 CSS 文件占用的空間幾乎比 HTML 本身還要大十倍。這里顯示了所有用到的樣式表:



          那是九個不同的樣式表。其中的很多樣式在這個頁面中并沒有用上。

          移除、合并、以及壓縮/縮小化

          Font-awesome CSS 代表了包含未使用樣式的極端。這個頁面中只用到了這個字體的三個字形。如果以 KB 為單位,getfedora.org 用到的 font-awesome CSS 最初有 25.2 KB. 在清理掉所有未使用的樣式后,它只有 1.3 KB 了。這只有原來體積的 4% 左右!對于 Bootstrap CSS,原來它有 118.3 KB,清理掉無用的樣式后只有 13.2 KB,這就是差異。

          下一個問題是,我們必須要這樣一個 bootstrap.css 和 font-awesome.css 嗎?或者,它們能不能合起來呢?沒錯,它們可以。這樣雖然不會節省更多的文件空間,但瀏覽器成功渲染頁面所需要發起的請求更少了。

          最后,在合并 CSS 文件后,嘗試去除無用樣式并縮小它們。這樣,它們只有 4.3 KB 大小,而你省掉了 10.1 KB.

          不幸的是,在 Fedora 軟件倉庫中,還沒有打包好的縮小工具。不過,有幾百種在線服務可以幫到你。或者,你也可以使用 CSS-HTML-JS Minify ,它用 Python 編寫,所以容易安裝。現在沒有一個可用的工具來凈化 CSS,不過我們有 UnCSS 這樣的 Web 服務。

          字體改進

          CSS3 帶來了很多開發人員喜歡的東西。它可以定義一些渲染頁面所用的字體,并讓瀏覽器在后臺下載。此后,很多 Web 設計師都很開心,尤其是在他們發現了 Web 設計中圖標字體的用法之后。像 Font Awesome 這樣的字體集現在非常流行,也被廣泛使用。這是這個字體集的大小:

          current free version 912 glyphs/icons, smallest set ttf 30.9KB, woff 14.7KB, woff2 12.2KB, svg 107.2KB, eot 31.2

          所以問題是,你需要所有的字形嗎?很可能不需要。你可以通過 FontForge 來去除這些無用字形,但這需要很大的工作量。你還可以用 Fontello . 你可以使用公共實例,也可以配置你自己的版本,因為它是自由軟件,可以在 Github 上找到。

          這種自定義字體集的缺點在于,你必須自己來托管字體文件。你也沒法使用其它在線服務來提供更新。但與更快的性能相比,這可能算不上一個缺點。

          總結

          現在,你已經做完了所有對內容本身的操作,來最大限度地減少瀏覽器加載和解釋的內容。從現在開始,只有服務器的管理技巧才才能幫到你了。

          有一個很簡單,但很多人都做錯了的事情,就是使用一些智能緩存。比如,CSS 或者圖片文件可以緩存一周。但無論如何,如果你用了 Cloudflare 這樣的代理服務或者自己構建了代理,首先要做的都應該是縮小頁面。用戶喜歡可以快速加載的頁面。他們會(默默地)感謝你,服務器的負載也會更小。


          via: https://fedoramagazine.org/design-faster-web-pages-part-3-font-css-tweaks/

          作者: Sirko Kemter 選題: lujun9972 譯者: StdioA 校對: wxy

          本文由 LCTT 原創編譯, Linux中國 榮譽推出

          點擊“了解更多”可訪問文內鏈接

          tml2pdf

          pdfbox

          PDFBox是一個Java庫,可用于創建,修改和提取PDF文件的內容。它是一個Apache軟件基金會的項目,使用Apache License 2.0許可證。
          PDFBox提供了一組API,可用于提取文本和圖像,添加和刪除頁面,提取PDF元數據和加密PDF文件等。

          主要依賴

                  <!-- 將 html 轉換為 xml 工具庫 -->
                  <dependency>
                      <groupId>org.jsoup</groupId>
                      <artifactId>jsoup</artifactId>
                      <version>1.17.1</version>
                  </dependency>
          
                  <!-- 第三方 pdfbox 包裝庫,提供 html 轉 pdf 功能 -->
                  <dependency>
                      <groupId>com.openhtmltopdf</groupId>
                      <artifactId>openhtmltopdf-pdfbox</artifactId>
                      <version>1.0.10</version>
                  </dependency>
          

          測試代碼

                  // 獲取 java 版本
                  String version = System.getProperty("java.specification.version");
          
                  // 獲取系統類型
                  String platform = System.getProperty("os.name", "");
                  platform = platform.toLowerCase().contains("window") ? "win" : "linux";
          
                  // 當前程序目錄
                  String current = System.getProperty("user.dir");
          
                  System.out.println(String.format("current=%s", current));
          
                  // html 文件路徑
                  File index = Paths.get(current, "..", "index.html").toFile();
                  if (!index.exists()) {
                      System.out.println(String.format("file not exist,file=%s", index.getAbsolutePath()));
                      return;
                  }
          
                  try {
                      Document doc = Jsoup.parse(index, "UTF-8");
                      // 補全標記
                      doc.outputSettings().syntax(Document.OutputSettings.Syntax.xml);
          
                      File file = Paths.get(current, String.format("java%s_%s.pdf", version, platform)).toFile();
                      FileOutputStream stream = new FileOutputStream(file);
          
                      PdfRendererBuilder builder = new PdfRendererBuilder();
          
                      // NOTE 字體問題,文檔中出現過的字段,需要手動加載字體
                      builder.useFont(Paths.get(current, "..", "fonts", "simsun.ttc").toFile(), "SimSun");
                      builder.useFont(Paths.get(current, "..", "fonts", "msyh.ttc").toFile(), "font-test");
                      builder.useFont(Paths.get(current, "..", "fonts", "msyh.ttc").toFile(), "Microsoft YaHei UI");
          
                      // NOTE 設置根目錄
                      String baseUrl = Paths.get(current, "..").toUri().toString();
                      builder.withHtmlContent(doc.html(), baseUrl);
          
                      builder.toStream(stream);
                      builder.run();
                  } catch (IOException e) {
                      throw new RuntimeException(e);
                  }

          效果預覽

          pdfbox-demo/java1.8_win.pdf · yjihrp/linux-html2pdf-demo - Gitee.com

          pdfbox-demo/java11_linux.pdf · yjihrp/linux-html2pdf-demo - Gitee.com

          實用工具

          # 查看 pdf 內部結構
          java -jar pdfbox-app debug path-to-pdf/test.pdf
          java -jar debugger-app path-to-pdf/test.pdf

          測試結果

          測試結果

          下一篇 5-LINUX HTML 轉 PDF-selenium


          主站蜘蛛池模板: 在线观看国产一区二三区| 精品一区二区久久| 日韩精品无码中文字幕一区二区 | 乱码精品一区二区三区| 日本视频一区二区三区| 国产成人精品一区二区A片带套| 久久亚洲AV午夜福利精品一区| 无码AV动漫精品一区二区免费| 性色AV一区二区三区无码| 精品欧洲av无码一区二区14| 亚洲一区免费观看| 亚洲av不卡一区二区三区| 国产免费无码一区二区| 国产亚洲无线码一区二区| 中文乱码精品一区二区三区| 一区二区三区杨幂在线观看| 国产午夜一区二区在线观看| 波多野结衣一区二区免费视频| 麻豆国产在线不卡一区二区 | 成人国内精品久久久久一区| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 中文字幕在线视频一区| 一区二区三区视频免费观看| 视频一区二区中文字幕| 99久久精品国产免看国产一区| 在线精品国产一区二区三区| 在线观看午夜亚洲一区| 国产精品熟女一区二区| 亚洲蜜芽在线精品一区| 呦系列视频一区二区三区| 亚洲乱码av中文一区二区| 麻豆va一区二区三区久久浪| 激情啪啪精品一区二区| 国产日韩精品一区二区三区在线 | 国产精品日本一区二区在线播放| 亚洲一区二区三区四区在线观看| 精品无码AV一区二区三区不卡| bt7086福利一区国产| 一区二区三区电影网| 日产精品久久久一区二区| 免费高清av一区二区三区|