我是计算机科学专业的学生。学校的第二年-我正在学习Linux。由于存在Corona病毒,我以独立的方式进行研究。在学习期间,我遇到了一个包含多个部分的问题-我无法解决。
这个问题要我执行mv
命令-我将一些文件传输到该文件夹。我尝试执行mv
命令-并尝试集成“管道”或其他类似的命令find
。
mv
我认为这不是正常的命令,需要整合更多的内容,而我又无法理解。我尝试解决了几天的问题。我也尝试在论坛中找到相同的问题-但找不到。
问题:
.c
或.h
进入Programs
文件夹。我的尝试可能是这样做的:
find "*.c" -o "*.h" | mv Programs
可以用三种方式解释该分配:
.c
和.h
文件从当前目录复制到目录Programs
,或者.c
和.h
文件从当前目录或其下面的任何位置复制到该目录Programs
。.c
以及.h
从系统上任何位置的文件复制到目录Programs
。请注意,分配中显示的是“复制”,而不是“移动”。这意味着您应该使用cp
命令,而不是mv
。
分配的第一种解释是通过以下方式解决的
cp *.[ch] Programs
(假设该*.[ch]
文件与我们感兴趣的所有文件匹配,并且在当前目录中没有成千上万个文件)。
作业的第二种解释是通过
find . -path ./Programs -prune -o -type f -name '*.[ch]' -exec cp {} Programs \;
这将在当前目录中或以下搜索所有后缀为.c
或.h
filename的常规文件,并对cp
每个此类文件执行。cp
由于该实用程序无法读取其标准输入流,因此我们无法通过它进行传输。
我们还确保避免查看Programs
目录(假定是当前目录中的子目录)的内部。不这样做将最终导致将文件从复制Programs
到Programs
。请参阅“解释发现的-path和-prune选项”了解有关更多信息-path
和-prune
。
第三种解释很容易从第二种实现:
find / -path "$PWD/Programs" -prune -o -type f -name '*.[ch]' -exec cp {} Programs \;
...我们只需要从find
目录树的顶部开始,并指定Programs
要避免的目录是路径中的目录即可$PWD/Programs
。
由于您无处访问,这可能会给您带来许多错误。为了避免这种情况,还请修剪您无法访问的目录,并仅复制您可以读取的文件:
find / \( -type d ! -executable -o -path "$PWD/Programs" \) -prune -o \
-type f -name '*.[ch]' -readable -exec cp {} Programs \;
这需要GNUfind
进行-executable
测试(如果目录是可执行文件,则可以搜索该目录)和-readable
测试。
请注意,find
此处的变体会将文件限制为仅常规文件(通过-type f
测试),而该cp *.[ch]
方法将复制以这两个字符结尾的任何类型的事物。同样,该find
解决方案将复制隐藏文件(名称以点开头的文件),而第一个解决方案默认情况下将不匹配这些类型的名称。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句