复制文件和一个目录

问题描述

我有一个txt文件,其中包含以下补丁方案的数千个文件

/fixed_dir1/fixed_dir2/fixed_dir3/variable_dir1/filename1
/fixed_dir1/fixed_dir2/fixed_dir3/variable_dir1/filename2
/fixed_dir1/fixed_dir2/fixed_dir3/variable_dir2/filename3

我想遍历所有文件,然后仅将variable_dir / filename复制到新目录中,例如最终得到这样的东西:

/new/path/variable_dir1/filename1
/new/path/variable_dir1/filename2
/new/path/variable_dir2/filename3

您能为我提供一个用于bash的小shell脚本吗?

解决方法

然后您可能会使用while循环

while read ;
do 
rep=s( echo $REPLY | sed 's/.\/dir3//' ) #bad method but more readable
mkdir -p new/$rep && cp $REPLY new/$rep/
done < filesource

示例

?francois@?zaphod?:~/tmp/test$ touch filename{1,2,3,4}
?francois@?zaphod?:~/tmp/test$ ls filename* > toto
?francois@?zaphod?:~/tmp/test$ while read ; do mkdir filename$REPLY && cp $REPLY filename$REPLY ; done  < toto
?francois@?zaphod?:~/tmp/test$ tree
.
├── filename1
├── filename2
├── filename3
├── filename4
├── filenamefilename1
│   └── filename1
├── filenamefilename2
│   └── filename2
├── filenamefilename3
│   └── filename3
├── filenamefilename4
│   └── filename4
,

欢迎来到记事本++的美好世界,在这里我做到了:

首先,我已经两次复制了您的文件列表:

/fixed_dir1/fixed_dir2/fixed_dir3/variable_dir1/filename1
/fixed_dir1/fixed_dir2/fixed_dir3/variable_dir1/filename2
/fixed_dir1/fixed_dir2/fixed_dir3/variable_dir2/filename3

在第二个副本中,我选择了/fixed_dir1/fixed_dir2/fixed_dir3,并通过/new/path进行了查找/替换。之后,我使用列模式将第二个列表复制到第一个列表之后,然后再次使用列模式,在列表的开头添加了cp ,所以我得到了类似的内容:

cp /fixed_dir1/fixed_dir2/fixed_dir3/variable_dir1/filename1 /new/path/variable_dir1/filename1
cp /fixed_dir1/fixed_dir2/fixed_dir3/variable_dir1/filename2 /new/path/variable_dir1/filename2
cp /fixed_dir1/fixed_dir2/fixed_dir3/variable_dir2/filename3 /new/path/variable_dir2/filename3

您可以尝试第一行,看看是否有效。如果没有纠正,请再次使用列模式以使其适用于所有行。

您可能会认为“ 您是认真的吗?我在寻找具有某些编程技能的脚本,并且您想到了一些基本的文本格式!”。我可以告诉你:我已经做了很多这样的操作,如果脚本有任何问题,您可能会弄乱整个文件/目录,而这种方法可能只对其中一种错误,您进行纠正以及对其他错误您拥有完全的控制权。