如何编写将用作 cron 作业的 mv 命令

How to write mv command that will work as cron job

我是 运行 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/'

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

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

我只是做一些简单的事情,比如(未经测试):

mkdir -p /media/tv || exit 1
for i in /media/tmp/*; do
    case $(basename "$i") in
        Transcode|.grab ) ;;
        * ) mv -n -- "$i" /media/tv ;;
    esac
done

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

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