如何忽略 mv 的错误:无法将 'XXXXXX 移动到其自身的子目录

如何忽略 mv 的错误:无法将 'XXXXXX 移动到其自身的子目录

在我们的 RHEL 7.6 服务器上,我们创建以下文件夹

# mkdir -p /var/data/data-logs_temp

第二部分是将所有内容移至以下 /var/data/位置/var/data/data-logs_temp

# mv /var/data/* /var/data/data-logs_temp

但我们从命令中得到的输出mv是:

mv: cannot move ‘/var/data/data-logs_temp’ to a sub directory of itself, ‘/var/data/data-logs_temp/data-logs_temp’

mv关于这一点,命令是正确的

但;是否可以告诉忽略这一点,因为我们需要命令mv的退出代码?mv0

或者也许有其他选项忽略移动其自身的子目录?

答案1

您可以使用 bash 的“扩展 glob”语法从要移动的文件列表中排除 data-logs_temp 子目录:

shopt -s extglob
mv /var/data/!(data-logs_temp) /var/data/data-logs_temp

格雷格的维基这个问题有关扩展 glob 的更多信息。

答案2

在更简单的 Unix/Linux 世界中,如果不调用扩展选项,人们会:

(a)mkdir data-logs_temp在您拥有的与 位于同一文件系统中/var/data且可由您写入的任何目录中,并且不在 的任何子树中/var/data/var如果您具有写入权限,则可以接受)。

(b)cd /var/datamv * /wherever/data-logs_temp,避免使用完整目录扩展所有通配名称。这不会复制数据,只会创建链接;并且它不会尝试将目录复制到自身中。

(C)mv /wherever/data-logs_temp /var/data。这只移动一个链接,并保留树结构。

相关内容