[英]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.