2019年10月

构造器是编程的强大组件。使用它们来释放 Java 的全部潜力。

在开源、跨平台编程领域,Java 无疑(?)是无可争议的重量级语言。尽管有许多伟大的跨平台框架,但很少有像 Java 那样统一和直接的。

当然,Java 也是一种非常复杂的语言,具有自己的微妙之处和惯例。Java 中与 构造器 constructor 有关的最常见问题之一是:它们是什么,它们的作用是什么?

简而言之:构造器是在 Java 中创建新 对象 object 时执行的操作。当 Java 应用程序创建一个你编写的类的实例时,它将检查构造器。如果(该类)存在构造器,则 Java 在创建实例时将运行构造器中的代码。这几句话中包含了大量的技术术语,但是当你看到它的实际应用时就会更加清楚,所以请确保你已经安装了 Java 并准备好进行演示。

没有使用构造器的开发日常

如果你正在编写 Java 代码,那么你已经在使用构造器了,即使你可能不知道它。Java 中的所有类都有一个构造器,因为即使你没有创建构造器,Java 也会在编译代码时为你生成一个。但是,为了进行演示,请忽略 Java 提供的隐藏构造器(因为默认构造器不添加任何额外的功能),并观察没有显式构造器的情况。

假设你正在编写一个简单的 Java 掷骰子应用程序,因为你想为游戏生成一个伪随机数。

首先,你可以创建骰子类来表示一个骰子。你玩了很久《龙与地下城》,所以你决定创建一个 20 面的骰子。在这个示例代码中,变量 dice 是整数 20,表示可能的最大掷骰数(一个 20 边骰子的掷骰数不能超过 20)。变量 roll 是最终的随机数的占位符,rand 用作随机数种子。

import java.util.Random;

public class DiceRoller {
  private int dice = 20;
  private int roll;
  private Random rand = new Random();

接下来,在 DiceRoller 类中创建一个函数,以执行计算机模拟模子滚动所必须采取的步骤:从 rand 中获取一个整数并将其分配给 roll变量,考虑到 Java 从 0 开始计数但 20 面的骰子没有 0 值的情况,roll 再加 1 ,然后打印结果。

import java.util.Random;

public class DiceRoller {
  private int dice = 20;
  private int roll;
  private Random rand = new Random();

最后,产生 DiceRoller 类的实例并调用其关键函数 Roller

// main loop
public static void main (String[] args) {
  System.out.printf("You rolled a ");

  DiceRoller App = new DiceRoller();
  App.Roller();
  }
}

只要你安装了 Java 开发环境(如 OpenJDK),你就可以在终端上运行你的应用程序:

$ java dice.java
You rolled a 12

在本例中,没有显式构造器。这是一个非常有效和合法的 Java 应用程序,但是它有一点局限性。例如,如果你把游戏《龙与地下城》放在一边,晚上去玩一些《快艇骰子》,你将需要六面骰子。在这个简单的例子中,更改代码不会有太多的麻烦,但是在复杂的代码中这不是一个现实的选择。解决这个问题的一种方法是使用构造器。

构造函数的作用

这个示例项目中的 DiceRoller 类表示一个虚拟骰子工厂:当它被调用时,它创建一个虚拟骰子,然后进行“滚动”。然而,通过编写一个自定义构造器,你可以让掷骰子的应用程序询问你希望模拟哪种类型的骰子。

大部分代码都是一样的,除了构造器接受一个表示面数的数字参数。这个数字还不存在,但稍后将创建它。

import java.util.Random;

public class DiceRoller {
  private int dice;  
  private int roll;
  private Random rand = new Random();

  // constructor
  public DiceRoller(int sides) {
    dice = sides;
  }

模拟滚动的函数保持不变:

public void Roller() {
  roll = rand.nextInt(dice);
  roll += 1;
  System.out.println (roll);
}

代码的主要部分提供运行应用程序时提供的任何参数。这的确会是一个复杂的应用程序,你需要仔细解析参数并检查意外结果,但对于这个例子,唯一的预防措施是将参数字符串转换成整数类型。

public static void main (String[] args) {
  System.out.printf("You rolled a ");
  DiceRoller App = new DiceRoller( Integer.parseInt(args[0]) );
  App.Roller();
}

启动这个应用程序,并提供你希望骰子具有的面数:

$ java dice.java 20
You rolled a 10
$ java dice.java 6
You rolled a 2
$ java dice.java 100
You rolled a 44

构造器已接受你的输入,因此在创建类实例时,会将 sides 变量设置为用户指定的任何数字。

构造器是编程的功能强大的组件。练习用它们来解开了 Java 的全部潜力。


via: https://opensource.com/article/19/6/what-java-constructor

作者:Seth Kenlon 选题:lujun9972 译者:laingke 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在上周,我买了一台 InteL NUC。虽然它是如此之小,但它与成熟的桌面型电脑差别甚小。实际上,大部分的基于 Linux 的微型 PC 都是基于 Intel NUC 构建的。

我买了第 8 代 Core i3 处理器的“ 准系统 barebone ” NUC。准系统意味着该设备没有 RAM、没有硬盘,显然也没有操作系统。我添加了一个 Crucial 的 8 GB 内存条(大约 33 美元)和一个 240 GB 的西数的固态硬盘(大约 45 美元)。

现在,我已经有了一台不到 400 美元的电脑。因为我已经有了一个电脑屏幕和键鼠套装,所以我没有把它们计算在内。

在我的办公桌上放着一个崭新的英特尔 NUC NUC8i3BEH,后面有树莓派 4

我买这个 Intel NUC 的主要原因就是我想在实体机上测试各种各样的 Linux 发行版。我已经有一个 树莓派 4 设备作为一个入门级的桌面系统,但它是一个 ARM 设备,因此,只有少数 Linux 发行版可用于树莓派上。(LCTT 译注:新发布的 Ubuntu 19.10 支持树莓派 4B)

这个文章里的亚马逊链接是(原文的)受益连接。请参阅我们的受益政策

在 NUC 上安装 Linux

现在我准备安装 Ubuntu 18.04 长期支持版,因为我现在就有这个系统的安装文件。你也可以按照这个教程安装其他的发行版。在最重要的分区之前,前边的步骤都大致相同。

第一步:创建一个 USB 启动盘

你可以在 Ubuntu 官网下载它的安装文件。使用另一个电脑去创建一个 USB 启动盘。你可以使用像 RufusEtcher 这样的软件。在 Ubuntu上,你可以使用默认的启动盘创建工具。

第二步:确认启动顺序是正确的

将你的 USB 启动盘插入到你的电脑并开机。一旦你看到 “Intel NUC” 字样出现在你的屏幕上,快速的按下 F2 键进入到 BIOS 设置中。

Intel NUC 的 BIOS 设置

在这里,只是确认一下你的第一启动项是你的 USB 设备。如果不是,切换启动顺序。

如果你修改了一些选项,按 F10 键保存退出,否则直接按下 ESC 键退出 BIOS 设置。

第三步:正确分区,安装 Linux

现在当机器重启的时候,你就可以看到熟悉的 Grub 界面,可以让你试用或者安装 Ubuntu。现在我们选择安装它。

开始的几个安装步骤非常简单,选择键盘的布局,是否连接网络还有一些其他简单的设置。

在安装 Ubuntu Linux 时选择键盘布局

你可能会使用常规安装,默认情况下会安装一些有用的应用程序。

接下来的是要注意的部分。你有两种选择:

  • 擦除磁盘并安装 Ubuntu Erase disk and install Ubuntu ”:最简单的选项,它将在整个磁盘上安装 Ubuntu。如果你只想在 Intel NUC 上使用一个操作系统,请选择此选项,Ubuntu 将负责剩余的工作。
  • 其他选项 Something else ”:这是一个控制所有选择的高级选项。就我而言,我想在同一 SSD 上安装多个 Linux 发行版。因此,我选择了此高级选项。

如果你选择了“ 擦除磁盘并安装 Ubuntu Erase disk and install Ubuntu ”,点击“ 继续 Continue ”,直接跳到第四步,

如果你选择了高级选项,请按照下面剩下的部分进行操作。

选择固态硬盘,然后点击“ 新建分区表 New Partition Table ”。

它会给你显示一个警告。直接点击“ 继续 Continue ”。

现在你就可以看到你 SSD 磁盘里的空闲空间。我的想法是为 EFI bootloader 创建一个 EFI 系统分区。一个根(/)分区,一个主目录(/home)分区。这里我并没有创建交换分区。Ubuntu 会根据自己的需要来创建交换分区。我也可以通过创建新的交换文件来扩展交换分区。

我将在磁盘上保留近 200 GB 的可用空间,以便可以在此处安装其他 Linux 发行版。你可以将其全部用于主目录分区。保留单独的根分区和主目录分区可以在你需要重新安装系统时帮你保存里面的数据。

选择可用空间,然后单击加号以添加分区。

一般来说,100MB 足够 EFI 的使用,但是某些发行版可能需要更多空间,因此我要使用 500MB 的 EFI 分区。

接下来,我将使用 20GB 的根分区。如果你只使用一个发行版,则可以随意地将其增加到 40GB。

根目录(/)是系统文件存放的地方。你的程序缓存和你安装的程序将会有一些文件放在这个目录下边。我建议你可以阅读一下 Linux 文件系统层次结构来了解更多相关内容。

填入分区的大小,选择 Ext4 文件系统,选择 / 作为挂载点。

接下来是创建一个主目录分区,我再说一下,如果你仅仅想使用一个 Linux 发行版。那就把剩余的空间都使用完吧。为主目录分区选择一个合适的大小。

主目录是你个人的文件,比如文档、图片、音乐、下载和一些其他的文件存储的地方。

既然你创建好了 EFI 分区、根分区、主目录分区,那你就可以点击“ 现在安装 Install Now ”按钮安装系统了。

它将会提示你新的改变将会被写入到磁盘,点击“ 继续 Continue ”。

第四步:安装 Ubuntu

事情到了这就非常明了了。现在选择你的分区或者以后选择也可以。

接下来,输入你的用户名、主机名以及密码。

看 7-8 分钟的幻灯片就可以安装完成了。

一旦安装完成,你就可以重新启动了。

当你重启的时候,你必须要移除你的 USB 设备,否则你将会再次进入安装系统的界面。

这就是在 Intel NUC 设备上安装 Linux 所需要做的一切。坦白说,你可以在其他任何系统上使用相同的过程。

Intel NUC 和 Linux 在一起:如何使用它?

我非常喜欢 Intel NUC。它不占用太多的桌面空间,而且有足够的能力去取代传统的桌面型电脑。你可以将它的内存升级到 32GB。你也可以安装两个 SSD 硬盘。总之,它提供了一些配置和升级范围。

如果你想购买一个桌面型的电脑,我非常推荐你购买使用 Intel NUC 迷你主机。如果你不想自己安装系统,那么你可以购买一个基于 Linux 的已经安装好的系统迷你主机

你是否已经有了一个 Intel NUC?有一些什么相关的经验?你有什么相关的意见与我们分享吗?可以在下面评论。


via: https://itsfoss.com/install-linux-on-intel-nuc/

作者:Abhishek Prakash 选题:lujun9972 译者:amwps290 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如今,企业网络经常使用“虚拟专用网络”来保证员工通信安全。但是,使用的协议有时会降低性能。如果你可以使用 SSH 连接远程主机,那么你可以设置端口转发。但这可能会很痛苦,尤其是在你需要与该网络上的许多主机一起使用的情况下。试试 sshuttle,它可以通过 SSH 访问来设置快速简易的虚拟专网。请继续阅读以获取有关如何使用它的更多信息。

sshuttle 正是针对上述情况而设计的。远程端的唯一要求是主机必须有可用的 Python。这是因为 sshuttle 会构造并运行一些 Python 代码来帮助传输数据。

安装 sshuttle

sshuttle 被打包在官方仓库中,因此很容易安装。打开一个终端,并使用 sudo 来运行以下命令:

$ sudo dnf install sshuttle

安装后,你可以在手册页中找到相关信息:

$ man sshuttle

设置虚拟专网

最简单的情况就是将所有流量转发到远程网络。这不一定是一个疯狂的想法,尤其是如果你不在自己家里这样的受信任的本地网络中。将 -r 选项与 SSH 用户名和远程主机名一起使用:

$ sshuttle -r username@remotehost 0.0.0.0/0

但是,你可能希望将该虚拟专网限制为特定子网,而不是所有网络流量。(有关子网的完整讨论超出了本文的范围,但是你可以在维基百科上阅读更多内容。)假设你的办公室内部使用了预留的 A 类子网 10.0.0.0 和预留的 B 类子网 172.16.0.0。上面的命令变为:

$ sshuttle -r username@remotehost 10.0.0.0/8 172.16.0.0/16

这非常适合通过 IP 地址访问远程网络的主机。但是,如果你的办公室是一个拥有大量主机的大型网络,该怎么办?名称可能更方便,甚至是必须的。不用担心,sshuttle 还可以使用 –dns 选项转发 DNS 查询:

$ sshuttle --dns -r username@remotehost 10.0.0.0/8 172.16.0.0/16

要使 sshuttle 以守护进程方式运行,请加上 -D 选项。它会以 syslog 兼容的日志格式发送到 systemd 日志中。

根据本地和远程系统的功能,可以将 sshuttle 用于基于 IPv6 的虚拟专网。如果需要,你还可以设置配置文件并将其与系统启动集成。如果你想阅读更多有关 sshuttle 及其工作方式的信息,请查看官方文档。要查看代码,请进入 GitHub 页面

题图由 Kurt Cotoaga 拍摄并发表在 Unsplash 上。


via: https://fedoramagazine.org/use-sshuttle-to-build-a-poor-mans-vpn/

作者:Paul W. Frields 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

想寻找免费的 Photoshop 替代品?这里有一些最好的自由开源软件,你可以用它们来代替 Adobe Photoshop。

Adobe Photoshop 是一个可用于 Windows 和 macOS 的高级图像编辑和设计工具。毫无疑问,几乎每个人都知道它。其十分受欢迎。在 Linux 上,你可以在虚拟机中使用 Windows 或通过 Wine 来使用 Photoshop,但这并不是一种理想的体验。

一般来说,我们没有太多可以替代 Adobe Photoshop 的选项。然而,在本文中,我们将提到一些在 Linux 上可用的最佳的开源 Photoshop 替代品(也支持跨平台)。

请注意 Photoshop 不仅仅是一个图片编辑器。摄影师、数码艺术家、专业编辑使用它用于各种用途。此处的替代软件可能不具备 Photoshop 的所有功能,但你可以将它们用于在 Photoshop 中完成的各种任务。

适用于 Linux、Windows 和 macOS 的 Adobe Photoshop 的开源替代品

最初,我想只关注 Linux 中的 Photoshop 替代品,但为什么要把这个列表局限于 Linux 呢?其他操作系统用户也可使用开源软件。

如果你正在使用 Linux,则所有提到的软件都应该可以在你的发行版的存储库中找到。你可以使用软件中心或包管理器进行安装。

对于其他平台,请查看官方项目网站以获取安装文件。

该列表没有特定的排名顺序

1、GIMP:真正的 Photoshop 替代品

主要特点:

  • 可定制的界面
  • 数字级修饰
  • 照片增强(使用变换工具)
  • 支持广泛的硬件(压敏平板、音乐数字接口等)
  • 几乎支持所有主要的图像文件
  • 支持图层管理

可用平台:Linux、Windows 和 macOS

GIMP 是我处理任何事情的必备工具,无论任务多么基础/高级。也许,这是你在 Linux 下最接近 Photoshop 的替代品。除此之外,它还是一个开源和免费的解决方案,适合希望在 Linux 上创作伟大作品的艺术家。

它具有任何类型的图像处理所必需的所有功能。当然,还有图层管理支持。根据你的经验水平,利用率会有所不同。因此,如果你想充分利用它,则应阅读 文档 并遵循 官方教程

2、Krita

主要特点:

  • 支持图层管理
  • 转换工具
  • 丰富的笔刷/绘图工具

可用平台:Linux、Windows 和 macOS

Krita 是一个令人印象深刻的开源的数字绘画工具。图层管理支持和转换工具的存在使它成为 Photoshop 的基本编辑任务的替代品之一。

如果你喜欢素描/绘图,这将对你很有帮助。

3、Darktable

主要特点:

  • RAW 图像显影
  • 支持多种图像格式
  • 多个带有混合运算符的图像操作模块

可用平台:Linux、Windows 和 macOS

Darktable 是一个由摄影师制作的开源摄影工作流应用程序。它可以让你在数据库中管理你的数码底片。从你的收藏中,显影 RAW 格式的图像并使用可用的工具对其进行增强。

从基本的图像编辑工具到支持混合运算符的多个图像模块,你将在探索中发现许多。

4、Inkscape

主要特点:

  • 创建对象的工具(最适合绘图/素描)
  • 支持图层管理
  • 用于图像处理的转换工具
  • 颜色选择器(RGB、HSL、CMYK、色轮、CMS)
  • 支持所有主要文件格式

可用平台:Linux、Windows 和 macOS

Inkscape 是一个非常流行的开源矢量图形编辑器,许多专业人士都使用它。它提供了灵活的设计工具,可帮助你创作漂亮的艺术作品。从技术上说,它是 Adobe Illustrator 的直接替代品,但它也提供了一些技巧,可以帮助你将其作为 Photoshop 的替代品。

与 GIMP 的官方资源类似,你可以利用 Inkscape 的教程 来最大程度地利用它。

在你看来,真正的 Photoshop 替代品是什么?

很难提供与 Adobe Photoshop 完全相同的功能。然而,如果你遵循官方文档和资源,则可以使用上述 Photoshop 替代品做很多很棒的事情。

Adobe 提供了一系列的图形工具,并且我们有 整个 Adobe 创意套件的开源替代方案。 你也可以去看看。

你觉得我们在此提到的 Photoshop 替代品怎么样?你是否知道任何值得提及的更好的替代方案?请在下面的评论中告诉我们。


via: https://itsfoss.com/open-source-photoshop-alternatives/

作者:Ankush Das 选题:lujun9972 译者:algzjh 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

本文将会向你展示如何在 Ubuntu 和其他 Linux 发行版本上解压文件。终端和图形界面的方法都会讨论。

Zip) 是一种创建压缩存档文件的最普通、最流行的方法。它也是一种古老的文件归档文件格式,这种格式创建于 1989 年。由于它的广泛使用,你会经常遇见 zip 文件。

在更早的一份教程里,我介绍了如何在 Linux 上用 zip 压缩一个文件夹。在这篇面向初学者的快速教程中,我会介绍如何在 Linux 上解压文件。

先决条件:检查你是否安装了 unzip

为了解压 zip 归档文件,你必须在你的系统上安装了 unzip 软件包。大多数现代的的 Linux 发行版本提供了解压 zip 文件的支持,但是对这些 zip 文件进行校验以避免以后出现损坏总是没有坏处的。

在基于 UnbutuDebian 的发行版上,你能够使用下面的命令来安装 unzip。如果你已经安装了,你会被告知已经被安装。

sudo apt install unzip

一旦你能够确认你的系统中安装了 unzip,你就可以通过 unzip 来解压 zip 归档文件。

你也能够使用命令行或者图形工具来达到目的,我会向你展示两种方法:

使用命令行解压文件

在 Linux 下使用 unzip 命令是非常简单的。在你放 zip 文件的目录,用下面的命令:

unzip zipped_file.zip

你可以给 zip 文件提供解压路径而不是解压到当前所在路径。你会在终端输出中看到提取的文件:

unzip metallic-container.zip -d my_zip
Archive:  metallic-container.zip
  inflating: my_zip/625993-PNZP34-678.jpg
  inflating: my_zip/License free.txt
  inflating: my_zip/License premium.txt

上面的命令有一个小问题。它会提取 zip 文件中所有的内容到现在的文件夹。你会在当前文件夹下留下一堆没有组织的文件,这不是一件很好的事情。

解压到文件夹下

在 Linux 命令行下,对于把文件解压到一个文件夹下是一个好的做法。这种方式下,所有的提取文件都会被存储到你所指定的文件夹下。如果文件夹不存在,会创建该文件夹。

unzip zipped_file.zip -d unzipped_directory

现在 zipped_file.zip 中所有的内容都会被提取到 unzipped_directory 中。

由于我们在讨论好的做法,这里有另一个注意点,我们可以查看压缩文件中的内容而不用实际解压。

查看压缩文件中的内容而不解压压缩文件

unzip -l zipped_file.zip

下面是该命令的输出:

unzip -l metallic-container.zip
Archive:  metallic-container.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
  6576010  2019-03-07 10:30   625993-PNZP34-678.jpg
     1462  2019-03-07 13:39   License free.txt
     1116  2019-03-07 13:39   License premium.txt
---------                     -------
  6578588                     3 files

在 Linux 下,还有些 unzip 的其它用法,但我想你现在已经对在 Linux 下使用解压文件有了足够的了解。

使用图形界面来解压文件

如果你使用桌面版 Linux,那你就不必总是使用终端。在图形化的界面下,我们又要如何解压文件呢? 我使用的是 GNOME 桌面,不过其它桌面版 Linux 发行版也大致相同。

打开文件管理器,然后跳转到 zip 文件所在的文件夹下。在文件上点击鼠标右键,你会在弹出的窗口中看到 “提取到这里”,选择它。

Unzip File in Ubuntu

unzip 命令不同,这个提取选项会创建一个和压缩文件名相同的文件夹(LCTT 译注:文件夹没有 .zip 扩展名),并且把压缩文件中的所有内容存储到创建的文件夹下。相对于 unzip 命令的默认行为是将压缩文件提取到当前所在的文件下,图形界面的解压对于我来说是一件非常好的事情。

这里还有一个选项“提取到……”,你可以选择特定的文件夹来存储提取的文件。

你现在知道如何在 Linux 解压文件了。你也许还对学习在 Linux 下使用 7zip 感兴趣?


via: https://itsfoss.com/unzip-linux/

作者:Abhishek Prakash 选题:lujun9972 译者:octopus 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

find 是日常工具箱中功能强大、灵活的命令行程序之一。它如它名字所暗示的:查找符合你指定条件的文件和目录。借助 -exec-delete 之类的参数,你可以让它对找到的文件进行操作。

命令行提示系列的这一期中,你将会看到 find 命令的介绍,并学习如何使用内置命令或使用 xargs 命令处理文件。

查找文件

find 至少要加上查找的路径。例如,此命令将查找(并打印)系统上的每个文件:

find /

由于一切皆文件,因此你会看到大量的输出。这可能无法帮助你找到所需的内容。你可以更改路径参数缩小范围,但这实际上并没有比使用 ls 命令更好。因此,你需要考虑要查找的内容。

也许你想在家目录中查找所有 JPEG 文件。 -name 参数允许你将结果限制为与给定模式匹配的文件。

find ~ -name '*jpg'

但是等等!如果其中一些扩展名是大写怎么办? -iname 类似于 -name,但不区分大小写:

find ~ -iname '*jpg'

很好!但是 8.3 命名方案出自 1985 年。某些图片的扩展名可能是 .jpeg。幸运的是,我们可以将模式使用“或”(-o)进行组合。括号需要转义,以便使 find 命令而不是 shell 程序尝试解释它们。

find ~ \( -iname 'jpeg' -o -iname 'jpg' \)

更进一步。如果你有一些以 jpg 结尾的目录怎么办?(我不懂你为什么将目录命名为 bucketofjpg 而不是 pictures?)我们可以加上 -type 参数来仅查找文件:

find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f

或者,也许你想找到那些名字奇怪的目录,以便之后可以重命名它们:

find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type d

最近你拍摄了很多照片,因此使用 -mtime(修改时间)将范围缩小到最近一周修改过的文件。 -7 表示 7 天或更短时间内修改的所有文件。

find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f -mtime -7

使用 xargs 进行操作

xargs 命令从标准输入流中获取参数,并基于它们执行命令。继续使用上一节中的示例,假设你要将上周修改过的家目录中的所有 JPEG 文件复制到 U 盘,以便插到电子相册上。假设你已经将 U 盘挂载到 /media/photo_display

find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f -mtime -7 -print0 | xargs -0 cp -t /media/photo_display

这里的 find 命令与以前的版本略有不同。-print0 命令让输出有一些更改:它不使用换行符,而是添加了一个 null 字符。xargs-0(零)选项可调整解析以达到预期效果。这很重要,不然对包含空格、引号或其他特殊字符的文件名执行操作可能无法按预期进行。对文件采取任何操作时,都应使用这些选项。

cp 命令的 -t 参数很重要,因为 cp 通常要求目的地址在最后。你可以不使用 xargs 而使用 find-exec 执行此操作,但是 xargs 的方式会更快,尤其是对于大量文件,因为它会单次调用 cp

了解更多

这篇文章仅仅是 find 可以做的事情的表面。 find 支持基于权限、所有者、访问时间等的测试。它甚至可以将搜索路径中的文件与其他文件进行比较。将测试与布尔逻辑相结合,可以为你提供惊人的灵活性,以精确地找到你要查找的文件。使用内置命令或管道传递给 xargs,你可以快速处理大量文件。


via: https://fedoramagazine.org/command-line-quick-tips-locate-and-process-files-with-find-and-xargs/

作者:Ben Cotton 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出