Answers:
没有。
该cp
命令不具备将其任何参数作为正则表达式进行处理的功能。即使通配符也不能由它(或大多数可执行文件)处理;而是由外壳处理。
cp test/* test2/
实际上是由bash扩展的,cp
其参数的真正含义是cp test/file1 test/file2 test/file3 test2/
(或根据的实际内容而适当的选择test/
)。
另外,我认为您的表达式[^\.php]
不会匹配您想要的表达式(它不仅匹配包含的文件.php
)。
您可能想研究该find
实用程序,以根据正则表达式过滤出文件列表,然后xargs
用于将返回的文件列表应用于cp
命令(假定find没有用于复制文件的内置处理程序;我想我对工具不太熟悉)。
您可以尝试:
find . ! -iregex ".*\.php.*" -exec cp {} /destination/folder/ \;
这表示要在当前目录中递归搜索路径中不包含“ .php”的文件,然后将其复制到中/destination/folder/
。
根据要求,对参数进行了更具体的细分:
.
-开始搜索的位置-在这种情况下为当前目录 !
-“ Not”运算符,将下一个测试的结果取反 -iregex
-不区分大小写的正则表达式测试。下一个参数是表达式。 ".*\.php.*"
-正则表达式匹配<Anything>.php<Anything>
-路径中某处具有“ .php”的任何文件。(请注意,包括在名称中包含“ .php”的文件夹内,您需要一个更复杂的表达式以仅匹配文件)-exec
-如果前面的测试返回true,则执行命令。下一个参数是命令,所有剩余的参数;
传递到命令。该{}
是代表文件名的特殊参数。cp
-find`命令应在每个匹配的路径名上运行。{}
-找到的文件的路径,cp
作为参数传递给它,以便它知道要复制的文件/destination/folder/
-参数传递给cp
,告诉cp
它应将文件复制到何处。\;
-这是寻找的;
终结者-exec
。我们使用a对其进行转义,\
以便您的shell不会尝试解析它,而是将其作为命令(find
)的参数提供编写与“不包含”的字符串匹配的正则表达式是相当困难的.php
,因此我们改为告诉find
搜索确实包含的字符串,.php
然后使用反转结果!
。
cp
其他二进制文件无法扩展正则表达式。您介意在给出的示例示例中详细说明每个选项和参数的含义吗?我知道,.
指的是当前目录,但什么!
,{}
,\;
,等指,以及他们是什么意思?例如,为什么您必须逃脱;
?
find . -name '[^\.txt]' -exec rm {} \;
因此,我的命令是我不愿使用find
。我可能是一个错误,但不确定我做错了什么。据我了解{}
,该命令所找到的每个文件find . -name '[^\.txt]'
您可以从控制台使用其他一些工具,例如grep和xargs。
ls -1 some_folder | egrep 'some_extended_regex' | xargs cp -t destination_folder
{}
给不同-t
?
您可以运行以下易于使用的命令:
find /home/usr/search_dir -iname *file_name_portion*.txt | xargs cp -t /home/usr/destination_folder
哈哈!
find . -name [^\.php] -exec cp {} /path/to/location \;
注意带有特殊字符的文件。