带着文件夹结构的拷贝
最近接了一个单细胞转录组项目,有80个10X样品,每个样品的单细胞测序数据都是100G左右的fq.gz文件,很不容易跑完了全部的cellranger流程,发现了一个很有意思的事情,每个样品的输出文件都很很复杂。这个时候我需要把各自样品的html文件拷贝并且改名后先给客户开卡,如下所示的结构:
sample01/outs/web_summary.html
sample02/outs/web_summary.html
sample03/outs/web_summary.html
sample04/outs/web_summary.html
sample05/outs/web_summary.html
本来呢是想使用cp命令,但是 cp 这个命令有很多参数:
–v
verbose: shows the progress of multiple copied files–p
preserve: keeps the same attributes, like creation date and file permissions–f
force: force the copy by deleting an existing file first–i
interactive: prompts for confirmation, highly advised–R
recursive: copies all files and subfolders in a directory–u
update: copy only if source is newer than destination
居然没有拷贝的同时保持文件夹结构,因为不同样品不同文件夹下面的文件名字是一样的,如果拷贝到一起会出现文件名冲突。
这个时候有两个选项,除了前面提到的拷贝的同时保留文件夹结构,还可以拷贝后修改文件名字,就使用它的路径名字就是样品名字。
搜索了一下,发现没有成熟的解决方案,懒得浪费时间了,就考虑自己造轮子,随便写了个代码,如下所示;
mkdir ~/html/
ls */outs/web_summary.html |while read id;do (cp $id ~/html/${id%%/*}.html );done
mkdir ~/matrix/
ls -d */outs/filtered_feature_bc_matrix |while read id;do (cp -r $id ~/matrix/${id%%/*} );done
还挺好用的,其实也可以试用高级命令,比如 rsync 。
布置一个学徒作业吧,我前面的代码是拷贝文件的同时给它改名了,但是其实也可以拷贝的同时也保持原来的文件夹结构,大家试试看!