Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 复制名称为偶数的文件-bash_Linux_Bash_Shell - Fatal编程技术网

Linux 复制名称为偶数的文件-bash

Linux 复制名称为偶数的文件-bash,linux,bash,shell,Linux,Bash,Shell,我想复制以.X.0.0结尾的/usr/lib中的所有文件,其中X是偶数。有没有比下面的方法更好的方法来选择所有文件 ls /usr/lib | grep "[02468].0.0$" 这种解决方案的问题是,如果有名称为“xy.800.0.0”的文件,我需要使用括号三次,等等。只需使用全局扩展来匹配文件: cp /usr/lib/*.*[02468].0.0 /path/to/destination shell将此模式扩展到文件列表,然后将它们作为参数传递给cp 由于标记了Bash,因此可以使

我想复制以.X.0.0结尾的/usr/lib中的所有文件,其中X是偶数。有没有比下面的方法更好的方法来选择所有文件

ls /usr/lib | grep "[02468].0.0$"

这种解决方案的问题是,如果有名称为“xy.800.0.0”的文件,我需要使用括号三次,等等。

只需使用全局扩展来匹配文件:

cp /usr/lib/*.*[02468].0.0 /path/to/destination
shell将此模式扩展到文件列表,然后将它们作为参数传递给
cp

由于标记了Bash,因此可以使用扩展glob使匹配更加严格:

shopt -s extglob failglob
cp /usr/lib/*.*([0-9])[02468].0.0 /path/to/destination

这将匹配0个或多个其他数字,后跟偶数数字,如果没有匹配的文件,则根本不运行该命令。

您可以使用扩展的grep正则表达式仅匹配偶数:

ls -1q /usr/lib | grep -E "\.[0-9]*[02468].0.0$"

然而,正如Tom所建议的,有比解析ls的输出更好的选择。使用glob扩展通常更安全、更快,而且更易于维护。

所有的数字都需要相等吗?也就是说,
blah.512.0.0
是否匹配?不幸的是,如果文件名包含空格,则很容易中断。您可以使用扩展glob在Bash中实现相同的“严格”匹配(我更新了我的答案以说明如何实现)。所谓“中断”,我的意思是输出不能用作另一个命令的参数列表。进一步研究后,我同意。