source="/somedir/dir-a"
dest="/somedir2/dir-z"
我需要在 $source 目录中递归查找包含字符串 720p 的所有文件并将它们移动到 $dest
只需要注意两件事 -
示例
对于像 - "$source/dir-b/dir-c/file-720p.mp4"
这样的文件,它应该执行以下操作:
mkdir -p "$dest/dir-b/dir-c"
mv "$source/dir-b/dir-c/file-720p.mp4" "$dest/dir-b/dir-c/file-720p.mp4"
答案 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
。