用單個命令重命名一組文件,請使用 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 的出現曾是技術的一大進步。你可以用一個集中式的樣式表來裝飾多個網頁。如今很多 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是一個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
*請認真填寫需求信息,我們會在24小時內與您取得聯系。