首页 > 解决方案 > 复制文件和一个目录

问题描述

我有一个 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 脚本吗?

标签: linuxbashshell

解决方案


然后你可能会使用一个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

推荐阅读