【问题标题】:Copy list of files in nested subdirectories复制嵌套子目录中的文件列表
【发布时间】:2020-06-21 16:15:18
【问题描述】:

我有一组子目录,里面有文件:

├── dir1
│   ├── file_a.type
│   ├── file_b.type
│   ├── file_c.type
│   └── file_d.type
├── dir2
│   ├── file_e.type
│   ├── file_f.type
│   ├── file_g.type
│   └── file_h.type
└── README.md

我可以保证每个文件名的唯一性。目录命名约定为n[some unique random number]

我有一个包含这些文件子集的文本文件

file_g.type
file_a.type
file_e.type

我想将与该文本文件中的名称匹配的所有文件复制到新目录。

我尝试使用 xargs 进行复制,但是由于子目录,这不起作用。

xargs -a files.txt cp -t new_dir each

我可以递归地将子目录中的所有文件复制到一个新目录并从那里开始。
但是,由于磁盘大小和带宽问题,这是不可能的。

使用标准 bash 实用程序执行此操作的有效方法是什么?

【问题讨论】:

    标签: bash subdirectory cp


    【解决方案1】:

    如果您的文件名包含在名为files.txt 的文件中:

    while read file
    do
        cp dir[12]/"${file}" -t new_dir
    done < files.txt
    

    使用xargs 可以这样做:

    xargs -a files.txt -IFILE bash -c 'cp dir[12]/"FILE" -t new_dir'
    

    【讨论】:

    • dir[12] 中的[12] 的用途是什么?它是dir 命令的特化吗?该命令在我的系统上失败,因为它查找一个字面上称为 dir[12] 的目录,而不是解析任何内容。
    • @PrunusPersica 不,dir[12] 可以匹配您在问题中显示的dir1dir2。如果这些不是真实的目录名称,请更新问题并将真实的目录名称放入其中,我会相应地更新答案
    • 谢谢,这对我来说是模棱两可的。我想在这种情况下它会像n*/"FILE"?
    • @PrunusPersica ure,如果您的目录都以 n 开头 - 但请注意,您的 new_dir 目录也是如此,因此如果在该目录中已有文件时运行脚本,您可能会得到两个 副本完成,这有点不必要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 2021-07-14
    相关资源
    最近更新 更多