移动文件和复制子树
Move files and copy subtree
source="/somedir/dir-a"
dest="/somedir2/dir-z"
我需要在 $source 目录中递归查找所有包含字符串 720p 的文件,并将它们移动到 $dest
只有 2 件事需要处理 -
- 对于所有要移动的此类文件,首先在 $dest 中创建该文件的外部 2 个目录,然后将匹配的文件移动到
中
- 我必须对数十万个文件执行此操作,因此一些并行化会有所帮助
例子
对于像 - "$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"
您正在寻找这样的东西:
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 primary 与 GNU xargs 并行化,但我认为这不会对性能产生太大影响,因为这是一项 IO 密集型任务。
如果输出令人满意,请删除 echo
s。
source="/somedir/dir-a"
dest="/somedir2/dir-z"
我需要在 $source 目录中递归查找所有包含字符串 720p 的文件,并将它们移动到 $dest
只有 2 件事需要处理 -
- 对于所有要移动的此类文件,首先在 $dest 中创建该文件的外部 2 个目录,然后将匹配的文件移动到 中
- 我必须对数十万个文件执行此操作,因此一些并行化会有所帮助
例子
对于像 - "$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"
您正在寻找这样的东西:
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 primary 与 GNU xargs 并行化,但我认为这不会对性能产生太大影响,因为这是一项 IO 密集型任务。
如果输出令人满意,请删除 echo
s。