【问题标题】:Move files and copy subtree移动文件和复制子树
【发布时间】:2021-09-04 14:10:09
【问题描述】:
source="/somedir/dir-a"
dest="/somedir2/dir-z"

我需要在 $source 目录中递归查找所有包含字符串 720p 的文件并将它们移动到 $dest

只需注意两件事 -

  1. 对于所有要移动的此类文件,首先在 $dest 中创建该文件的外部 2 个目录,然后将匹配的文件移动到该目录中
  2. 我必须为数十万个文件执行此操作,因此进行一些并行化会有所帮助

示例 对于像 - "$source/dir-b/dir-c/file-720p.mp4" 这样的文件,它应该执行以下操作:

  1. mkdir -p "$dest/dir-b/dir-c"
  2. mv "$source/dir-b/dir-c/file-720p.mp4" "$dest/dir-b/dir-c/file-720p.mp4"

【问题讨论】:

    标签: find xargs


    【解决方案1】:

    你正在寻找这样的东西:

    src=foo
    dst=bar
    export dst
    find "${src}" -name '*720p*' -type f -exec sh -c '
    for p; do
      np=${dst}${p#"${p%/*/*/*}"}
      echo mkdir -p "${np%/*}" &&
      echo mv "$p" "$np"
    done' sh {} +
    

    这可以使用 GNU find 的 -print0 主节点和 GNU xargs 来并行化,但我认为这不会在性能方面产生太大影响,因为这更像是一个 IO - 密集型任务。

    如果输出令人满意,请删除echos。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      相关资源
      最近更新 更多