移动文件和复制子树

时间:2021-06-20 18:22:46

标签: find xargs

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"

1 个答案:

答案 0 :(得分: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 - 密集型任务。

如果输出令人满意,则删除 echo

相关问题