首页 > 解决方案 > 如何编写将作为 cron 作业工作的 mv 命令

问题描述

我正在运行 Centos 7。我需要一个 cron 作业,将所有内容从 /media/tmp 移动到 /media/tv,除了 .grab 和 Transcode 文件夹。昨天我认为以下方法有效,但今天它也移动了 Transcode 文件夹。

mv -n /media/tmp/*!(Transcode)!(.grab) /media/tv/

我发现上面的内容不能像 '(' 原因和错误一样作为 cron 工作。我知道我需要逃避这些,但现在我明白了

mv: cannot stat ‘/media/tmp/!(Transcode)!(.grab)’: No such file or directory 

我目前对 bash 脚本的尝试是

#!/bin/bash

mv -n '/media/tmp'/*!\(Transcode\)!\(.grab\) '/media/tv/'

我的理解是 * 是问题所在,但是在文件路径上使用 ' 或 " 似乎并不能像我发现的那个帖子那样修复它。

关于如何让它正常工作的任何想法?

标签: bashmv

解决方案


您正在尝试使用extglob,它可能没有为 cron 启用。!我会完全避免该选项,使用负正则表达式匹配遍历全局。

for file in /media/tmp/*; do
  [[ ! "$file" =~ Transcode|\.grab$ ]] && mv -n "$file" /media/tv/
done

推荐阅读