繁体   English   中英

复制文件和一个目录

[英]Copy files and one directory up

我有一个 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 复制到一个 newdir 中,例如最终得到如下内容:

/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

欢迎来到 Notepad++ 的精彩世界,我在这里做了:

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

/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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM