带着文件夹结构的拷贝

最近接了一个单细胞转录组项目,有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 。

Comments are closed.