如何复制单个文件并保留其所属目录名称到其他位置
方案1:Shell 循环 + cp 命令(逻辑最直观)
进入所有样本目录的上级目录,执行以下命令即可:
# 替换下方路径为你实际的目标存储路径 target_dir="/your/target/directory/path" for sample_dir in sample_id*/; do # 自动在目标路径创建对应样本目录,已存在也不会报错 mkdir -p "${target_dir}/${sample_dir}" # 仅复制contigs.txt到对应样本目录下 cp "${sample_dir}/contigs.txt" "${target_dir}/${sample_dir}/" done
方案2:Rsync 单行命令(适合批量快速操作)
利用rsync的过滤规则,不需要写循环即可实现精准同步:
# 替换末尾路径为你实际的目标存储路径 rsync -av --include='/' --include='contigs.txt' --exclude='' ./ /your/target/directory/path/
规则优先级说明:
- 先匹配
--include='/'保留所有样本目录,避免目录被排除后无法同步内部文件 - 再匹配
--include='contigs.txt'仅允许同步contigs.txt文件 - 最后
--exclude='*'排除所有其他未被包含的文件和目录
方案3:find + cp --parent (自动保留目录结构)
搭配find筛选目标文件,利用cp原生的--parent参数自动保留上层目录结构:
# 替换末尾路径为你实际的目标存储路径 find ./sample_id* -name "contigs.txt" -exec cp --parent {} /your/target/directory/path/ \;
注意:如果你的样本目录不是以
sample_id开头命名,将上述命令中的sample_id*替换为匹配你实际目录的通配符即可。
内容的提问来源于stack exchange,提问作者CuriousDude
相关产品推荐
相关产品推荐

