1

我编写了一个简短的 csh 脚本,它读取一个文件,其中包含要复制的文件的路径,然后将这些文件复制到一个目录:

1 #!/bin/csh
2 #
3 # This script copies source and executable files modified to solve issues 
4 # brought up by Veracode.
5 #
6 
7 set tempdir = '~/updatedfiles2'
8 
9 foreach line ( "`cat modifiedFiles`" )
*************here is the cp line**************
10    `cp -a $line $tempdir`
**********************************************
11 end

以前工作得很好。我已经决定我想以目录树的形式在同一tempdir目录下保留这些文件的路径,因为当具有不同路径的文件具有相同的名称时会发生冲突。(即/vobs/emv/integratedClient/jniWrapper/OEMIMAKEFILE/vobs/mv_components/utilities/general/OEMIMAKEFILE

因此,我尝试使用该--parents选项,如下所示:

1 #!/bin/csh
2 #
3 # This script copies source and executable files modified to solve issues 
4 # brought up by Veracode.
5 #
6 
7 set tempdir = '~/updatedfiles2'
8 
9 foreach line ( "`cat modifiedFiles`" )
*************here is the cp line**************
10    `cp -a --parents $line $tempdir`
**********************************************
11 end

当我测试它时,它开始尝试从根目录开始复制我的整个系统,这不是我想要的效果。我只是试图复制特定文件,在复制时维护它们的目录结构。

我找到了一些解释--parents,但没有一个描述像我所看到的那样。是不是因为我用--parents错了?是我的输入文件吗?我不确定。

的内容modifiedFiles(即 的值tempdir)如下所示:

...
4 /vobs/emv/C_API/APIPrivate.cpp
5 /vobs/mv_components/utilities/class/Array.c
6 /vobs/mv_components/utilities/class/String1.c
7 /vobs/mv_components/export_functions/code/write_nastran_ortho3_none.c
...

/vobs是一个根目录,所以这可能会影响--parents. 有没有人听说过不受限制的递归复制,尽管有特定的文件路径并且没有-r参数?我误会了--parents吗?

4

1 回答 1

0

哇,我觉得很傻。

一遍又一遍地查看之后,我来发现我做错了什么。

上面的实际命令位于 csh 脚本中。当命令包含在(``)csh 脚本中的前面刻度中时,该命令将被执行,并且该命令的输出由 shell 使用。因此,我正在执行cp,然后在 shell 中执行输出。我不确定为什么它会递归地向上复制,但是删除那些前面的刻度可以解决所有问题。我在原来的“工作”脚本中忽略了一个先前的错误,当我添加该--parents选项时,已经损坏的脚本更坏了。

故事的寓意,小心前面的蜱虫!

对于任何有兴趣的人,之前:

...
9 foreach line ( "`cat modifiedFiles`" )
*************here is the cp line**************
10    `cp -a --parents $line $tempdir`
**********************************************
11 end
...

之后:

...
9 foreach line ( "`cat modifiedFiles`" )
*************here is the cp line**************
10    cp -a --parents $line $tempdir
**********************************************
11 end
...

此外,输入文件中的两个条目以 C 样式注释掉, /* comment */ 这导致从根目录进行递归复制。哈哈……嗯。愚蠢的我。

于 2015-04-27T23:04:29.990 回答