与 'cp --parents' 工作原理相关的有趣问题
Interesting issues related to how 'cp --parents' works
我写了一个简短的 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
的解释,但是 none 描述了我所看到的任何事情。是不是我用错了--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
?
哇,我觉得很蠢。
翻来覆去才发现自己做错了什么。
上面的实际命令是在 csh 脚本中。当命令包含在 csh 脚本中的前面的刻度 (``)
中时,该命令将被执行,并且该命令的输出将被 shell 使用。因此,我正在执行 cp
,然后在 shell 中执行输出。我不确定为什么它会递归地向上复制,但是删除那些前面的勾号可以解决所有问题。我在原来的 "working" 脚本中忽略了之前的一个错误,当我添加 --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 */
那导致从根目录递归复制。哈哈……诶。愚蠢的我。
我写了一个简短的 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
的解释,但是 none 描述了我所看到的任何事情。是不是我用错了--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
?
哇,我觉得很蠢。
翻来覆去才发现自己做错了什么。
上面的实际命令是在 csh 脚本中。当命令包含在 csh 脚本中的前面的刻度 (``)
中时,该命令将被执行,并且该命令的输出将被 shell 使用。因此,我正在执行 cp
,然后在 shell 中执行输出。我不确定为什么它会递归地向上复制,但是删除那些前面的勾号可以解决所有问题。我在原来的 "working" 脚本中忽略了之前的一个错误,当我添加 --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 */
那导致从根目录递归复制。哈哈……诶。愚蠢的我。