我试图只将文件的一个子集从一个目录复制到另一个目录,cp但是我收到了消息cp: cannot stat [^\.php]': No such file or directory。有没有办法只使用cp命令来使用正则表达式?
Dar*_*oid 33
不。
该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/ \;
Run Code Online (Sandbox Code Playgroud)
这表示递归搜索当前目录中路径中不包含“.php”的文件并将它们复制到 .php 文件中/destination/folder/。
根据要求,对参数进行更具体的细分:
. - 开始搜索的位置 - 在这种情况下,当前目录 ! - “非”运算符,反转下一个测试的结果 -iregex- 不区分大小写的正则表达式测试。下一个参数是表达式。 ".*\.php.*"- 正则表达式匹配<Anything>.php<Anything>- 路径中某处包含“.php”的任何文件。(注意,包括在名称中包含“.php”的文件夹中,您需要一个更复杂的表达式来仅匹配文件)-exec- 如果前面的测试返回 true,则执行命令。下一个参数是命令,所有剩余的参数;都传递给命令。the{}是一个表示文件名的特殊参数。cp - find` 应该在每个匹配的路径名上运行的命令。{}- 找到的文件的路径,cp作为参数传递给它,以便它知道要复制哪个文件/destination/folder/- 参数传递给cp,告诉cp它应该将文件复制到哪里。\;- 这是正在寻找的;终结者-exec。我们用 a 对其进行转义,\这样您的 shell 就不会尝试解析它,而是将其作为参数提供给命令 ( find)编写一个匹配“没有的字符串”的正则表达式是相当困难的.php,所以我们告诉find搜索确实包含的字符串,.php然后用!.
0xA*_*xAF 10
您可以从控制台使用一些其他工具,例如 grep 和 xargs。
ls -1 some_folder | egrep 'some_extended_regex' | xargs cp -t destination_folder
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60394 次 |
| 最近记录: |