问题描述
/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
您可以尝试第一行,看看是否有效。如果没有纠正,请再次使用列模式以使其适用于所有行。
您可能会认为“ 您是认真的吗?我在寻找具有某些编程技能的脚本,并且您想到了一些基本的文本格式!”。我可以告诉你:我已经做了很多这样的操作,如果脚本有任何问题,您可能会弄乱整个文件/目录,而这种方法可能只对其中一种错误,您进行纠正以及对其他错误您拥有完全的控制权。