我使用'-print0'选项处理带空格的文件名,但出现错误

问题描述

#!/bin/bash
find /home/data -name '*QQ*' -print0 -exec bash -c ' mv $1 ${0/\-QQ/-TT}' {} \;

我使用'-print0'选项处理带空格的文件名,但是出现错误

/home/data/gone to sea.1080p-QQ.mp4mv: target 'sea.1080p-TT.mp4' is not a directory

哪一部分错了?

谢谢

解决方法

您不需要-print0,因为您不需要将输出传递到另一个程序。

您只需要在bash命令中正确引用即可。

find /home/data -name '*-QQ*' -exec bash -c 'mv "$1" "${1/\-QQ/-TT}"' {} {} \;

只要文件名中不包含双引号或$字符,此方法就应该起作用。

您还可以使用bash -c命令来避免使用rename

find /home/data -name '*-QQ*' -exec rename 's/-QQ/-TT/' {} +